如何用Gradle Kotlin脚本创建一个胖罐子? [英] How to create a fat JAR with Gradle Kotlin script?
本文介绍了如何用Gradle Kotlin脚本创建一个胖罐子?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
正如标题所示,我想知道如何修改gradle.build.kts
,以便有一个任务来创建包含所有依赖项(包括Kotlin库)的唯一jar
。
我在Groovy中找到此示例:
//create a single Jar with all dependencies
task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'Gradle Jar File Example',
'Implementation-Version': version,
'Main-Class': 'com.mkyong.DateUtils'
}
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
但是我不知道怎么用科特林写,除了:
task("fatJar") {
}
推荐答案
这是一个不使用插件的版本,更像是Groovy版本。
import org.gradle.jvm.tasks.Jar
val fatJar = task("fatJar", type = Jar::class) {
baseName = "${project.name}-fat"
manifest {
attributes["Implementation-Title"] = "Gradle Jar File Example"
attributes["Implementation-Version"] = version
attributes["Main-Class"] = "com.mkyong.DateUtils"
}
from(configurations.runtime.map({ if (it.isDirectory) it else zipTree(it) }))
with(tasks["jar"] as CopySpec)
}
tasks {
"build" {
dependsOn(fatJar)
}
}
一些评论者指出,这在更新的Gradle版本中不再起作用。 使用Gradle 5.4.1测试的更新:
import org.gradle.jvm.tasks.Jar
val fatJar = task("fatJar", type = Jar::class) {
baseName = "${project.name}-fat"
manifest {
attributes["Implementation-Title"] = "Gradle Jar File Example"
attributes["Implementation-Version"] = version
attributes["Main-Class"] = "com.mkyong.DateUtils"
}
from(configurations.runtimeClasspath.get().map({ if (it.isDirectory) it else zipTree(it) }))
with(tasks.jar.get() as CopySpec)
}
tasks {
"build" {
dependsOn(fatJar)
}
}
请注意configurations.runtimeClasspath.get()
和with(tasks.jar.get() as CopySpec)
中的差异。
这篇关于如何用Gradle Kotlin脚本创建一个胖罐子?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文