【问题标题】:How to use selected classes from other subproject as test dependency in Gradle如何使用从其他子项目中选择的类作为 Gradle 中的测试依赖项
【发布时间】:2021-02-10 22:21:05
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我不知道这个问题的答案(但我愿意),我使用解决方法 - 引入单独的 gradle 子项目测试构建器。这也需要至少拆分出域子项目。
  • 测试源集的外部依赖呢?下游项目也需要它们吗?

标签: java gradle


【解决方案1】:

你会想要一些类似的东西:

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)是有问题的,应该尽可能避免。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2011-08-04
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多