使用 gradle 的多项目测试依赖项已弃用 - 对于 Gradle 5.6 及更高版本,请使用此答案。例进一步阅读

我有一个多项目配置,我想使用 gradle。

我的项目是这样的:

  • 项目 A

    • -> src/main/java
    • -> src/test/java
  • 项目 B

    • -> src/main/java(取决于项目 Asrc/main/java)
    • -> src/test/java(取决于项目 Asrc/test/java)

我的项目 B 文件是这样的:build.gradle

apply plugin: 'java'
dependencies {
  compile project(':ProjectA')
}

该任务工作得很好,但 不会从项目 A 编译测试文件。compileJavacompileTestJava


答案 1

已弃用 - 对于 Gradle 5.6 及更高版本,请使用此答案

项目 B 中,您只需要添加一个依赖项:testCompile

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

使用 Gradle 1.7 进行测试。


答案 2

现在,这在 Gradle 中作为一等功能得到支持。带有或插件的模块也可以包含一个插件,该插件公开了要与帮助程序一起使用的帮助程序类和资源。这种方法对工件和分类器的好处是:javajava-libraryjava-test-fixturestestFixtures

  • 适当的依赖关系管理(实现/api)
  • 与测试代码的良好分离(单独的源代码集)
  • 无需过滤掉测试类即可仅公开实用程序
  • 由 Gradle 维护

:modul:one

modul/one/build.gradle

plugins {
  id "java-library" // or "java"
  id "java-test-fixtures"
}

modul/one/src/testFixtures/java/com/example/Helper.java

package com.example;
public class Helper {}

:modul:other

modul/other/build.gradle

plugins {
  id "java" // or "java-library"
}
dependencies {
  testImplementation(testFixtures(project(":modul:one")))
}

modul/other/src/test/java/com/example/other/SomeTest.java

package com.example.other;
import com.example.Helper;
public class SomeTest {
  @Test void f() {
    new Helper(); // used from :modul:one's testFixtures
  }
}

进一步阅读

有关详细信息,请参阅文档:
https://docs.gradle.org/current/userguide/java_testing.html#sec:java_test_fixtures

它是在5.6:
https://docs.gradle.org/5.6/release-notes.html#test-fixtures-for-java-projects 中添加的


推荐