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

时间:2018-11-16 10:25:14

标签: gradle build.gradle gradle-kotlin-dsl

我的一个gradle子项目的测试源中有一些实用程序文件,并且想在另一个子项目中使用它们。 我的“源”子项目称为core,而使用它的子项目称为tem

我尝试迁移和集成following example

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 个答案:

答案 0 :(得分:2)

您的大多数代码都可以

但是您必须为jar定义classesDirs

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

我还添加了依赖于testClasses的类,以确保可以编译类。

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

答案 1 :(得分:0)

以下配置对我有用,它包括测试类和测试资源:

核心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"))