java - 如何使用其他子项目中的选定类作为 Gradle 中的测试依赖项

标签 java gradle

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

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

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

我用测试 JAR(它可以过滤内容,但作为依赖项存在问题)尝试了这个想法,并与 eachFileRecurse 进行了一些组合,但没有成功。

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

最佳答案

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

上游/build.gradle:

apply plugin: "java"

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

artifacts {
    testRuntime testJar
}

下游/build.gradle:

apply plugin: "java"

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

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

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

关于java - 如何使用其他子项目中的选定类作为 Gradle 中的测试依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21945508/

相关文章:

Android Studio 和 Alfresco 移动 SDK

java - 处理不同类型对象之间交互的设计模式

spring - IntelliJ runner 上的集成测试通过但在 gradle 上没有通过

java - 有没有办法将 MDB javadoc 作为其描述注入(inject)?

Java启动bash脚本问题

gradle - 是否可以在实时模式下运行gradle

android - 如何在命令行上不使用 Gradle 构建 Android apk?

android - 使用classloader AntClassLoader []无法找到taskdef类org.apache.tools.ant.taskdefs.optional.ssh.Scp。

java - 在 Java 中将 ISO7816d4Padding 与 BlockCipher 结合使用

java - Intent putExtra() 不起作用