Gradle kotlin dsl - 如何指定重复任务?
Gradle kotlin dsl - how to specify duplicate tasks?
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 之间切换。
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 之间切换。