我们有一个多模块设置,我们正在模块之间共享一些测试类(主要是Fakes实现)。我们当前的解决方案(您可以在下面找到)仅适用于用Java编写的类,但是我们也在考虑支持共享的kotlin类。
if (isAndroidLibrary()) {
task compileTestCommonJar(type: JavaCompile) {
classpath = compileDebugUnitTestJavaWithJavac.classpath
source sourceSets.testShared.java.srcDirs
destinationDir = file('build/testCommon')
}
taskToDependOn = compileDebugUnitTestSources
} else {
task compileTestCommonJar(type: JavaCompile) {
classpath = compileTestJava.classpath
source sourceSets.testShared.java.srcDirs
destinationDir = file('build/testCommon')
}
taskToDependOn = testClasses
}
task testJar(type: Jar, dependsOn: taskToDependOn) {
classifier = 'tests'
from compileTestCommonJar.outputs
}
如何修改compileTestCommonJar
使其支持kotlin?
答案 0 :(得分:1)
这是我们的工作:
test
源集输出打包到jar中。configurations { tests }
...
task testJar(type: Jar, dependsOn: testClasses) {
baseName = "test-${project.archivesBaseName}"
from sourceSets.test.output
}
artifacts { tests testJar }
dependencies {
testCompile project(path: ":my-project-with-shared-test-classes", configuration: "tests")
}
PS:老实说,我希望有一个单独的带有通用测试类的Gradle模块,因为它是更明确的解决方案。
答案 1 :(得分:0)
task compileTestCommonJar(type: JavaCompile)
仅因为其任务为JavaCompile
类型而编译.java文件。
还有KotlinCompile
任务,因此您需要对其进行合并,它的工作原理与JavaCompile
类似,但仅编译.kt文件。
如果我不使用任务系统共享依赖关系,我将使用单独的模块并使用默认的compileTestKotlin
和compileTestJava
任务的outputs