Gradletesting依赖关系

我有两个项目,项目A和项目B.都是用groovy编写的,并使用gradle作为构build系统。

项目A需要项目B.这适用于编译和testing代码。

如何configuration项目A的testing类访问项目B的testing类?

您可以通过“testing”configuration公开testing类,然后在该configuration上定义testCompile依赖关系。

我有这个块为所有的Java项目,其中jar所有的testing代码:

task testJar(type: Jar, dependsOn: testClasses) { baseName = "test-${project.archivesBaseName}" from sourceSets.test.output } configurations { tests } artifacts { tests testJar } 

然后,当我有testing代码,我想要访问我使用的项目之间

 dependencies { testCompile project(path: ':aProject', configuration: 'tests') } 

这是Java的; 我假设它也适用于groovy。

这是一个更简单的解决scheme,不需要中间的jar文件:

 dependencies { ... testCompile project(':aProject').sourceSets.test.output } 

在这个问题上有更多的讨论: 多项目testing依赖与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") 

上述解决scheme的工作原理,但不是为Gradle的最新版本1.0-rc3 RC3。

  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 } 

对于Android上最新的gradle版本(我目前在2.14.1上),只需要在Project B中添加下面的代码即可得到Project A的所有testing依赖项。

 dependencies { androidTestComplie project(path: ':ProjectA') } 

对于Gradle 1.5

 task testJar(type: Jar, dependsOn: testClasses) { from sourceSets.test.java classifier "tests" }