我有一个小型 Java (Kotlin) 应用程序。它需要一些大型库,例如 openblas 和 opencv。我想将其打包在一个拖放式可执行 JAR 文件中,但是当我构建 fatJar 时,它包含所有可能平台的库,最终超过 600MB。
这也太大了吧!我更喜欢一个小型应用程序,当您第一次运行它时,它会下载适合用户平台的库。这是一个标准吗?我不能假设最终用户将安装 Gradle 或 Maven,只是他们安装了 JRE。
我尝试了我认为是最新的 fatJar
build.gradle.kts
:
val fatJar = task("fatJar", type = Jar::class) {
archiveBaseName.set("${project.name}-fat")
manifest {
attributes["Implementation-Title"] = project.name
attributes["Implementation-Version"] = project.version
attributes["Main-Class"] = application.mainClass
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) })
with(tasks["jar"] as CopySpec)
}
然后检查 JAR 文件中有哪些库:它表现正确,并且没有复制 Kotlin 版本或其他任何不好的东西。