使用Gradle Kotlin DSL中其他子项目的testCompile输出

4
我有一些实用程序文件在gradle的一个子项目测试源中,希望能够在另一个子项目中使用它们。 我的“源”子项目名为core,而使用该项目的子项目名为tem
我尝试迁移和整合以下示例: (链接)
In your Server project:

configurations {
    testArtifacts.extendsFrom testCompile
}
task testJar(type: Jar) {
    classifier "test"
    from sourceSets.test.output
}
artifacts {
    testArtifacts testJar
}

In your ServerWeb project:

testCompile project(path: ":Server", configuration: 'testArtifacts')

就我所知,这里需要进行对话。我在我的core.gradle.kts文件中添加了以下内容:
val testConfig = configurations.create("testArtifacts") {
    extendsFrom(configurations["testCompile"])
}

tasks.register("testJar", Jar::class.java) {
    classifier += "test"
    from(sourceSets["test"].output)
}

artifacts {
    add("testArtifacts", tasks.named<Jar>("testJar") )
}

并尝试在 tem.gradle.kts 中引用它:

testImplementation(project(":core", "testArtifacts"))

代码编译成功,但我仍无法访问核心类。

我错过了什么?

2个回答

3

您的大部分代码应该没有问题

但是您必须为jar定义classesDirs

tasks.register<Jar>("testJar") {
    dependsOn("testClasses")
    archiveBaseName.set("${project.name}-test")
    from(sourceSets["test"].output.classesDirs)
}

我还添加了depends on testClasses来确保类被编译。

你可以通过执行testJar任务来测试jar是否正常。然后验证生成的jar包是否包含你的类。如果你在from方法调用中犯了错误,则会得到一个空的jar包。


2
以下配置对我来说可以同时包含测试类和测试资源:
核心 build.gradle.kts
val testConfig = configurations.create("testArtifacts") {
    extendsFrom(configurations["testCompile"])
}   

tasks.register("testJar", Jar::class.java) {
    dependsOn("testClasses")
    classifier += "test"
    from(sourceSets["test"].output)
}   

artifacts { 
    add("testArtifacts", tasks.named<Jar>("testJar") )
} 

tem build.gradle.kts

testImplementation(project(":core", "testArtifacts"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接