【问题标题】:How to share test classes across Gradle projects? [duplicate]如何跨 Gradle 项目共享测试类? [复制]
【发布时间】:2015-10-27 04:25:49
【问题描述】:

我正在使用 Gradle 来构建和测试我的项目。我有两个项目:

ProjA  contains      src\test\java\BaseTest.java       
ProjB  contains      src\test\java\MyTest.java

MyTest extends BaseTest

当我运行 ProjB.gradle 时,如何让它从 ProjA 中看到 BaseTest 类?

我尝试添加:

dependencies {
  testCompile project('ProjA') 
}

但是没有用。

【问题讨论】:

  • 你能澄清“它没有用”吗?你收到错误信息了吗?你的代码没有编译吗?您在运行时收到 NoClassDefFound 消息了吗?

标签: java gradle


【解决方案1】:

也许有更好、更简单、更清洁的方法,但我认为你在这里有三个选择。

第一个选项

由于BaseTest 是一个实际上是可重用测试库的一部分的类(您在两个项目中都使用它),您可以简单地创建一个testing 子项目,其中 BaseTest 定义在 src/main/java 和不是 src/test/java。其他两个子项目的testCompile 配置都将依赖于project('testing')

第二个选项(Gradle 7.3 更新)

在第二个选项中,您将在第一个项目中定义一个额外的工件和配置:

configurations {
  testClasses {
    extendsFrom(testImplementation)
  }
}

task testJar(type: Jar) {
  archiveClassifier.set('test')
  from sourceSets.test.output
}

// add the jar generated by the testJar task to the testClasses dependency
artifacts {
  testClasses testJar
}

您将在第二个项目中依赖此配置:

dependencies {
  testCompile project(path: ':ProjA', configuration: 'testClasses')
}

第三个选项

和第二个基本一样,只是没有给第一个项目增加新的配置:

task testJar(type: Jar) {
  archiveClassifier.set('test')
  from sourceSets.test.output
}

artifacts {
  testRuntime testJar
}

dependencies {
  testCompile project(path: ':one', configuration: 'testRuntime')
}

【讨论】:

  • 我收到了Could not get unknown property 'testRuntime' for configuration ':projA:testClasses' of type org.gradle.api.internal.artifacts.configurations.DefaultConfiguration。我在这里错过了什么?
  • 谢谢,今天仍然有效(第二和第三个选项)
  • @gopalanrc 我今天遇到了同样的错误,但这是因为我正在处理com.android.library。你解决了吗?
  • 第二个选项对我来说效果很好。
  • 对于 Gradle 7+,您需要定义一个新配置。所以第二个选项就OK了。
猜你喜欢
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 2016-10-19
  • 2017-09-18
  • 1970-01-01
相关资源
最近更新 更多