Java 如何在Gradle项目中共享测试类?

Java 如何在Gradle项目中共享测试类?,java,gradle,Java,Gradle,我正在使用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'

我正在使用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') 
}

但是它不起作用。

也许有更好、更简单、更干净的方法,但我认为您有三种选择

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

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

configurations {
  testClasses {
    extendsFrom(testRuntime)
  }
}

task testJar(type: Jar) {
  classifier = 'test'
  from sourceSets.test.output
}

// add the jar generated by the testJar task to the testClasses dependency
artifacts {
  testClasses testJar
}
task testJar(type: Jar) {
  classifier = 'test'
  from sourceSets.test.output
}

artifacts {
  testRuntime testJar
}
在第二个项目中,您将依赖于此配置:

dependencies {
  testCompile project(path: ':ProjA', configuration: 'testClasses')
}
第三种选择 基本上与第二个相同,只是没有向第一个项目添加新配置:

configurations {
  testClasses {
    extendsFrom(testRuntime)
  }
}

task testJar(type: Jar) {
  classifier = 'test'
  from sourceSets.test.output
}

// add the jar generated by the testJar task to the testClasses dependency
artifacts {
  testClasses testJar
}
task testJar(type: Jar) {
  classifier = 'test'
  from sourceSets.test.output
}

artifacts {
  testRuntime testJar
}


你能澄清一下“它不起作用”吗?你收到错误消息了吗?你的代码没有编译吗?您在运行时收到NoClassDefFound消息了吗?我收到了
无法获取配置的未知属性“testRuntime”:org.gradle.api.internal.artifacts.configurations.DefaultConfiguration类型的projA:testClasses
。我在这里遗漏了什么?谢谢,它今天仍然有效(第二和第三选项)@gopalanrc我今天收到了相同的错误,但这是因为我正在使用
com.android.library
。你解决了这个问题吗?第二个选择对我很有效。