プロジェクトAとプロジェクトBの2つのプロジェクトがあります。どちらもgroovyで作成されており、ビルドシステムとしてgradleを使用しています。
プロジェクトAにはプロジェクトBが必要です。これは、コンパイルコードとテストコードの両方に当てはまります。
プロジェクトAのテストクラスがプロジェクトBのテストクラスにアクセスできるように構成するにはどうすればよいですか?
「テスト」構成を介してテストクラスを公開し、その構成にtestCompile依存関係を定義できます。
すべてのJavaプロジェクトにこのブロックがあり、すべてのテストコードをjarします。
task testJar(type: Jar, dependsOn: testClasses) {
baseName = "test-${project.archivesBaseName}"
from sourceSets.test.output
}
configurations {
tests
}
artifacts {
tests testJar
}
次に、テストコードがあるときに、使用するプロジェクト間でアクセスしたい
dependencies {
testCompile project(path: ':aProject', configuration: 'tests')
}
これはJava用です。 groovyでも機能するはずだと思います。
これは、中間のjarファイルを必要としない簡単なソリューションです。
dependencies {
...
testCompile project(':aProject').sourceSets.test.output
}
この質問にはさらに議論があります。 gradleを使用したマルチプロジェクトテストの依存関係
これは私のために働く(Java)
// use test classes from spring-common as dependency to tests of current module
testCompile files(this.project(':spring-common').sourceSets.test.output)
testCompile files(this.project(':spring-common').sourceSets.test.runtimeClasspath)
// filter dublicated dependency for IDEA export
def isClassesDependency(module) {
(module instanceof org.gradle.plugins.ide.idea.model.ModuleLibrary) && module.classes.iterator()[0].url.toString().contains(rootProject.name)
}
idea {
module {
iml.whenMerged { module ->
module.dependencies.removeAll(module.dependencies.grep{isClassesDependency(it)})
module.dependencies*.exported = true
}
}
}
.....
// and somewhere to include test classes
testRuntime project(":spring-common")
上記のソリューションは機能しますが、最新バージョンでは機能しません1.0-rc3
Gradle。
task testJar(type: Jar, dependsOn: testClasses) {
baseName = "test-${project.archivesBaseName}"
// in the latest version of Gradle 1.0-rc3
// sourceSets.test.classes no longer works
// It has been replaced with
// sourceSets.test.output
from sourceSets.test.output
}
ProjectAにProjectBで使用するテストコードが含まれており、ProjectBがartifactsを使用してテストコードを含める場合、ProjectBのbuild.gradleは次のようになります。
dependencies {
testCompile("com.example:projecta:1.0.0-SNAPSHOT:tests")
}
次に、ProjectAのbuild.gradleのarchives
セクションにartifacts
コマンドを追加する必要があります。
task testsJar(type: Jar, dependsOn: testClasses) {
classifier = 'tests'
from sourceSets.test.output
}
configurations {
tests
}
artifacts {
tests testsJar
archives testsJar
}
jar.finalizedBy(testsJar)
ProjectAのアーティファクトがアーティファクトに公開されると、-tests jarが含まれます。この-tests jarは、ProjectBのtestCompile依存関係として追加できます(上記を参照)。
Android最新のgradleバージョン(現在2.14.1))では、プロジェクトAからすべてのテスト依存関係を取得するには、プロジェクトBに以下を追加するだけです。
dependencies {
androidTestComplie project(path: ':ProjectA')
}
Gradle 1.5
task testJar(type: Jar, dependsOn: testClasses) {
from sourceSets.test.Java
classifier "tests"
}