Создание Java Runnable JAR, который загружает библиотеки для конкретной платформы.
У меня есть небольшое приложение Java (Kotlin). Для этого требуются большие библиотеки, такие как openblas и opencv. Я хотел бы упаковать его в исполняемый JAR-файл, который можно перетаскивать, но когда я создаю fatJar, он включает библиотеки для всех возможных платформ и в конечном итоге занимает более 600 МБ.
Это слишком огромно! Я бы предпочел небольшое приложение, которое загружает соответствующие библиотеки для платформы пользователя при первом запуске. Это стандарт? Я не могу предположить, что у конечного пользователя будет установлен Gradle или Maven, просто у него установлена JRE.
Я попробовал, как мне кажется, последнюю версию fatJar для
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 или что-то еще плохое.