使用 gradle.kts

时间:2021-01-04 11:24:32

标签: gradle gradle-kotlin-dsl

我们有一个包含多个子项目的多项目 gradle 存储库。其中一个子项目应该生成单独的 testJar 并将其发布到本地 maven 存储库:

// build a repositories-testJar.jar with test classes for services tests
tasks.register<Jar>("testJar") {
    archiveClassifier.set("testJar")
    from(sourceSets["test"].output)
}

// the testJar must be built within the build phase
tasks.build {
    dependsOn(tasks.withType<Jar>())
}

// needed for publishing plugin to be aware of the testJar
configurations.create("testJar") {
    extendsFrom(configurations["testCompile"])
}

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

这有效,我可以看到 -testJar.jar 是在 /build/libs 中生成的。

然后,在 rootProject gradle.kts 中我们设置了一个发布扩展:

allprojects {
    configure<PublishingExtension> {
        publications {
            create<MavenPublication>(project.name) {
                groupId = "foo.bar"
                artifactId = project.name.toLowerCase().replace(":", "-")
                version = "ci"
                from(components["kotlin"])
            }
        }

        repositories {
            maven {
                url = uri("file://${rootProject.rootDir}/../m2")
            }
        }
    }
}

这通常也有效,我可以看到在 m2 目录中发布的模块。但是,testJar 未发布。我找不到如何将 testJar 工件附加到根项目中定义的发布的方法。

1 个答案:

答案 0 :(得分:0)

通过添加解决:

publishing {
    publications {
        create<MavenPublication>(project.name + "-" + testArtifact.name) {
            groupId = "my.group"
            artifactId = project.name.toLowerCase().replace(":", "-")
            version = "version"
            artifact(testArtifact)
        }
    }
}