最后一条评论在 https://github.com/johnrengelman/shadow/issues/138有一个定义多个shadowJars的示例。我曾尝试想出一个在 kotlin DSL 中工作的版本,但没有成功。它应该是什么样子?
我的最新尝试(几个)如下,但它不起作用,因为我不允许直接实例化任务。 (我是 gradle 新手,所以可能在概念上遗漏了一些东西。)
tasks {
val internal = ShadowJar()
internal.isZip64 = true
internal.archiveFileName.set("internal.jar")
internal.mergeServiceFiles()
internal.manifest {
attributes(mapOf("Main-Class" to "com.foo.InternalApplication"))
}
internal.minimize()
val external = ShadowJar()
external.isZip64 = true
external.archiveFileName.set("external.jar")
external.mergeServiceFiles()
external.manifest {
attributes(mapOf("Main-Class" to "com.foo.ExternalApplication"))
}
external.minimize()
}
tasks {
val internal by existing
val external by existing
"build" {
dependsOn(internal)
dependsOn(external)
}
}
最佳答案
您是否尝试过定义扩展 ShadowJar
任务类型的新任务?
类似这样的事情:
tasks.create<ShadowJar>("internal") {
isZip64 = true
archiveFileName.set("internal.jar")
mergeServiceFiles()
manifest {
attributes(mapOf("Main-Class" to "com.foo.InternalApplication"))
}
minimize()
}
tasks.create<ShadowJar>("external") {
isZip64 = true
archiveFileName.set("external.jar")
mergeServiceFiles()
manifest {
attributes(mapOf("Main-Class" to "com.foo.ExternalApplication"))
}
minimize()
}
构建任务应该已经存在。因此,我们不想定义名称冲突的新任务,因此让我们配置现有的 build
任务来添加新的依赖项,这样每次构建都会发生冲突。
tasks.build {
dependsOn("internal")
dependsOn("external")
}
如果您不想在每次项目构建时都生成 jar(会很多),您可能需要定义一个任务来显式调用来 jar 两者。
tasks.create<Exec>("buildJars") {
dependsOn("internal")
dependsOn("external")
}
我没有在可以测试这一点的计算机上,所以我根据您的原始代码片段做出了很多假设。然而,这种方法是创建新任务并定义其类型的标准且正确的方法。
您可以在 official docs 阅读更多相关信息。 。所有代码片段都有一个选项卡可以在 Groovy 和 Kotlin 之间切换。
关于Gradle kotlin dsl - 如何指定重复任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60838336/