Как сгенерировать исполняемый файл модульного Java-приложения с помощью javapackager?

Среда: Win10, Oracle JDK 9, Eclipse, jlink, javapackager.

Контекст: я пытаюсь создать исполняемый файл с javapackager с пользовательским образом времени выполнения java, созданным с помощью jlink, читая документация javapackager. Не устанавливается.

Jlink создал zip-файл, содержащий все мои файлы классов java и инкапсулированные ресурсы (это означает, что у меня нет доступа к ним из системного обозревателя) + пользовательский jre. Он поставляется с программой запуска .bat для запуска приложения. Все работает нормально.

Walkthrow: 1-й я обнаружил, что есть jpackage утилита OpenJDK , доступная из OpenJDK14, чтобы сделать модульное приложение Java исполняемым, которое все еще находится в стадии разработки. Я не нашел способа с этим работать. Позже я исследовал Inno Setup, но он не удовлетворяет моим потребностям (потому что мне не нужен установщик). Позже я обнаружил, что, начиная с Oracle JDK 8, существует javapackager инструмент для создания исполняемых файлов для каждой платформы (max, linux, windows .. ).

Я не могу заставить работать javapackager. Это одна из различных попыток команды, которую я выполнил в Windows cmd.

javapackager 
-deploy 
    -native exe
    --add-modules myModule,javafx.graphics,javafx.controls 
    --module-path "C:\path\to\javafx-jmods;C:\path\to\target\classes;C:\path\to\more\jmods" 
    -outdir "C:\myApp" 
    -outfile MyApp 
    -appclass myPackage.MyApp 
     -name "MyApp"

С помощью предыдущей команды я получаю сообщение об ошибке:

Error: No application jars foun

Итак, я понял, что смешиваю команду -deploy и ее параметры с командой -createjar и ее параметрами.

Может кто-нибудь объяснить, как сгенерировать .exe с помощью javapackager?

Изменить 1

Пробовал jpackage (используя jdk 14 с установщиком Wix, необходимым в качестве зависимости):

jpackage --package-type exe -o outputdir --name myApp --add-modules myapp,javafx.graphics,javafx.controls 
--module-path "C:\path\to\some\jmods;C:\path\to\myTarget;C:\path\to\javafx-sdk-11.0.2plugin" -m myapp/App

Выход: myApp.1.0.exe. Он открывает cmd и «установщик», но не запускает myApp, поскольку в него не включена настраиваемая среда выполнения java.


person tec    schedule 19.07.2019    source источник
comment
Я бы порекомендовал jdk.java.net/jpackage Я использую его регулярно, и он мне подходит . Что вы имеете в виду: я не нашел никакого способа с этим работать.   -  person mipa    schedule 19.07.2019
comment
@mipa Потому что загрузка jpackage идет с неполной версией OpenJDK14, а не только с jpackage.jar или чем-то еще. Я не умею им пользоваться. Не могли бы вы добавить свое использование в ответ?   -  person tec    schedule 19.07.2019


Ответы (2)


Установите JDK, поставляемый с jpackage, как любой JDK, и установите для него свой JAVA_HOME.

В качестве подготовки к упаковке я проинструктировал Maven скопировать все зависимые файлы jar проекта в папку установщика / ввода.

Затем перейдите в основную папку вашего проекта и вызовите

$JAVA_HOME/bin/jpackage \
--name yourAppName \
--output installer/output \
--input installer/input \
--main-jar yourAppMain.jar \
--main-class xxx.yyy.yourAppMainClass

Результат должен теперь быть в папке установщика / вывода.

Для более подробной информации о вариантах вы можете позвонить

$JAVA_HOME/bin/jpackage --help

Также есть возможность использовать другой JDK с jpackager, но это более продвинутый вариант.

person mipa    schedule 19.07.2019
comment
Я договорился сгенерировать exe-файл (добавив свое приложение .jmod), но он ничего не делает, потому что в нем нет jre. Результатом jlink является настраиваемая среда выполнения, пока не знаю, как ее включить. - person tec; 22.07.2019
comment
Если вы выполнили мои приведенные выше инструкции и предварительные условия документации для вашей платформы, вы должны получить exe С включенной средой выполнения. Если нет, то с вашей настройкой что-то не так. - person mipa; 22.07.2019
comment
Действительно, результатом являются 3 папки (приложение, корзина, среда выполнения) с исполняемым файлом внутри папки bin, но есть ли способ, чтобы exe-файл упаковывал эти 3 папки? Пробовал команду --package-type, но она делает установщик. Мне это нужно просто для того, чтобы бежать. - person tec; 22.07.2019
comment
Вы пробовали exe в папке bin? Он должен содержать все. На моем Mac я получаю только папку приложения, которая является эквивалентом exe-файла в Windows. - person mipa; 22.07.2019

Если ваш проект построен с использованием Gradle, вы можете легко использовать плагин Badass jlink: https://github.com/beryx/badass-jlink-plugin для создания установщика / пакета с использованием jpackage.

Вот как создать образ приложения с помощью OpenJDK 11 и OpenJDK 14 с jpackage только для сборки установщика / пакета: https://walczak.it/blog/distributing-javafx-desktop-applications-without-requiring-jvm-using-jlink-and-jpackage

person Adam from WALCZAK.IT    schedule 12.11.2019
comment
Спасибо за ответ, но я использую Maven. Не помню как, но мне уже удалось получить исполняемый установщик (я ищу только исполняемый файл). Я вернусь к этому посту в другой раз. - person tec; 13.11.2019