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" }