如何在Gradle中将其他子项目中的选定类用作测试依赖项

时间:2014-02-21 21:26:08

标签: java gradle

要从另一个子项目添加对测试源集的简单依赖,我可以这样做:

testCompile project(':subFoo1').sourceSets.test.output

此解决方案有效,但在许多情况下,并不打算将整个源集添加为依赖项。例如,我想只使用测试数据构建器,在这种情况下,像test-logback.xml(和常规测试)这样的文件会污染主模块中的测试类路径。

我尝试使用测试JAR(可能有过滤内容,但作为依赖项存在问题)以及与eachFileRecurse的某些组合,但没有运气。

我的问题。如何只添加给定源集的子集(例如,只有具有匹配**/*Builder.*模式的构建器的类)作为另一个子项目中的testCompile依赖项?

1 个答案:

答案 0 :(得分:5)

你会想要的东西:

upstream/build.gradle

apply plugin: "java"

task testJar(type: Jar) {
    classifier = "tests"
    from sourceSets.test.output
    exclude "**/*Test.class"
}

artifacts {
    testRuntime testJar
}

downstream/build.gradle

apply plugin: "java"

dependencies {
    testCompile project(path: ":upstream", configuration: "testRuntime")
}

您也可以声明(例如testRuntime)并使用自定义配置,而不是使用configurations { testFixture },这可以让您更好地控制将哪些外部依赖项传递给下游项目。另一种选择是为要传递的测试代码部分声明一个单独的源集。 (这也可以为您提供单独的编译和运行时配置。)

PS:进入另一个项目的对象模型(例如project(':subFoo1').sourceSets.test.output)是有问题的,应该尽可能避免。