Fat Jar使用Gradle Kotlin DSL扩展依赖项
我试图在基于Kotlin的gradle文件中使用以下内容构建一个胖jarFat Jar使用Gradle Kotlin DSL扩展依赖项,gradle,gradle-kotlin-dsl,Gradle,Gradle Kotlin Dsl,我试图在基于Kotlin的gradle文件中使用以下内容构建一个胖jar 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)
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)
}
}
然而,fat jar扩展了所有依赖项。我希望将JAR按原样包含在/lib目录中,但我无法确定如何实现这一点
有谁能给我一些建议,告诉我怎样才能做到这一点
谢谢您在规范的
map
部分中使用了zipTree
,它的行为如下:解压非目录的文件
如果要在/lib
中使用JAR,请将中的替换为:
from(configurations.runtimeClasspath) {
into("lib")
}
如果有人使用的是kotlin multiplatform
plugin,那么配置就有点不同了。下面是一个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")
}
}
}