Создание 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 или что-то еще плохое.

0 ответов

Другие вопросы по тегам