我试图在基于Kotlin的gradle文件中使用以下内容构建一个胖子。
val fatJar = task("fatJar", type = Jar::class) {
baseName = "safescape-lib-${project.name}"
// manifest Main-Class attribute is optional.
// (Used only to provide default main class for executable jar)
from(configurations.runtimeClasspath.map({ if (it.isDirectory) it else zipTree(it) }))
with(tasks["jar"] as CopySpec)
}
tasks {
"build" {
dependsOn(fatJar)
}
}
但是,胖子罐扩展了所有依赖项。我想将jars包含在/ lib目录中,但是我无法确定如何实现。
任何人都可以提供有关如何实现此目标的任何指示吗?
谢谢
答案 0 :(得分:1)
好吧,您在规范的zipTree
部分中使用map
,并且其行为符合the documentation:它将非目录文件解压缩。
如果您想要/lib
中的罐子,请将from
替换为:
from(configurations.runtimeClasspath) {
into("lib")
}
答案 1 :(得分:0)
如果有人使用kotlin-multiplatform
插件,则配置会有所不同。这是一个fatJar
任务配置,假设JVM应用程序具有来自JS模块的嵌入式JS前端:
afterEvaluate {
tasks {
create("jar", Jar::class).apply {
dependsOn("jvmMainClasses", "jsJar")
group = "jar"
manifest {
attributes(
mapOf(
"Implementation-Title" to rootProject.name,
"Implementation-Version" to rootProject.version,
"Timestamp" to System.currentTimeMillis(),
"Main-Class" to mainClassName
)
)
}
val dependencies = configurations["jvmRuntimeClasspath"].filter { it.name.endsWith(".jar") } +
project.tasks["jvmJar"].outputs.files +
project.tasks["jsJar"].outputs.files
dependencies.forEach { from(zipTree(it)) }
into("/lib")
}
}
}