Можно ли развернуть JLinked Runtime с помощью javapackager?

Инструкции к javapackager чуть выше примера 2-1 в Руководстве по развертыванию Java SE/Автономная упаковка приложений указывает, что файл jar требуется в команде -deploy.

Если я использую модульную банку, я получаю это сообщение об ошибке:

Исключение: java.lang.Exception: Ошибка: модули не допускаются в srcfiles: [dist\tcdmod.jar].

Если я использую эквивалентную немодульную банку, полученный пакет будет включать в себя полную среду выполнения. Но я хочу использовать сокращенное время выполнения, которое я сделал с jlink, находящимся в папке /dist.

Может ли команда javapackager развертываться с помощью среды выполнения, созданной jlink? Как?

В разделе «Настройка JRE» не упоминается команда javapackager.

В следующем разделе «Упаковка для модульных приложений» есть следующая строка:

Используйте инструмент Java Packager для упаковки модульных и немодульных приложений.

Отличается ли инструмент Java Packager от javapackager? В этом разделе нет примеров использования javapackager.

Вот команда javapacker, которую я использовал:

javapackager -deploy -native -outdir packages -outfile ToneCircleDrone -srcdir dist -srcfiles tcdplain.jar -appclass com.adonax.tanpura.TCDLaunch -name "ToneCircleDrone" -title "ToneCircleDrone test"

В инструкциях в документации javapackager не упоминается сценарий, в котором используется среда выполнения jlink. Существует аргумент Bundler -Bruntime, но он используется только для указания на установленную среду выполнения, отличную от системной по умолчанию, AFAIK.


person Phil Freihofner    schedule 16.05.2018    source источник
comment
Ответ от java-gaming.org показывает, что возможно подключиться к среде выполнения jlink. java-gaming.org/index.php/topic,38682.0. html#msg369300 Я подниму этот комментарий, чтобы ответить, если я действительно выполню и проверю его. Вместо этого я могу посоветоваться использовать jlink напрямую со сторонним установщиком.   -  person Phil Freihofner    schedule 16.05.2018
comment
В итоге я выбрал альтернативный курс для развертывания приложения jlink: (1) компиляция из командной строки, (2) использование командной строки jlink, (3) использование Inno Setup 5 для упаковки дистрибутива, созданного с помощью jlink. Все шаги описаны в пошаговом руководстве, размещенном на java-gaming.org. java-gaming.org/ темы/развертывание-и-упаковка/38754/msg/   -  person Phil Freihofner    schedule 20.08.2018


Ответы (1)


javapackager, поставляемый с JDK 9 и выше, использует jlink для создания образа jre:

Для автономных приложений Java Packager для JDK 9 упаковывает приложения с образом среды выполнения JDK 9, созданным инструментом jlink. Чтобы упаковать JRE JDK 8 или JDK 7 вместе с вашим приложением, используйте JDK 8 Java Packager.

https://docs.oracle.com/javase/9/tools/javapackager.htm#JSWOR719

Вы даже можете передавать аргументы в jlink, используя -BjlinkOptions=<options>

Кроме того, -Bruntime допустимо только для пакетов, развернутых с использованием -deploy -native jnlp.

Для компиляции модульного приложения вместо -srcdir используйте --module-path <dir>, а затем укажите основной модуль с помощью -m <module name>.

РЕДАКТИРОВАТЬ: хотя документации по -BjlinkOptions нет, она присутствует в исходном коде javapackager.

jdk.packager/jdk.packager.internal.legacy.JLinkBundlerHelper

https://github.com/teamfx/openjfx-10-dev-rt/blob/bf971fe212e9bd14b164e4c1058bc307734e11b1/modules/jdk.packager/src/main/java/jdk/packager/internal/legacy/JLinkBundlerHelper.java#L96

Пример использования: -BjlinkOptions=compress=2 заставит javapackager запустить jlink с флагом --compress=2, создав образ JRE со сжатием на уровне Zip.

Кроме того, запуск javapackager с флагом -Bverbose=true покажет вам, какие именно аргументы передаются в jlink, с помощью строки в выводе примерно такой:

userArguments = {стрип-отладка = 1 сжатие = 2}

person robot_rover    schedule 30.05.2018
comment
Ответ можно улучшить либо с помощью примера, иллюстрирующего использование -BjlinkOptions, либо со ссылкой на документ о его использовании, а также с некоторым контекстом для комментария -Bruntime. Последний имеет аспекты непоследовательности в том виде, в каком он написан в настоящее время. Как эта команда связана с ответом на вопрос? Часть, объясняющая, как изменить команду с помощью -srcdir на использование --module-path для модульного приложения, очень полезна (при условии, что это работает). Но было бы полезнее, если бы полный пример строки был написан с использованием либо моего примера, либо примера сценария документа javapackager в качестве отправной точки для необходимых изменений. - person Phil Freihofner; 31.05.2018
comment
Благодарим за предоставление дополнительной информации в ваших изменениях. Я могу поддержать ваш ответ, но я не нашел времени, чтобы проверить, работает ли он, так как сейчас я использую JLink через командную строку и упаковываю с помощью InnoSetup5. - person Phil Freihofner; 14.06.2018
comment
Мне кажется, что у других было много возможностей задать вопросы, если были какие-либо проблемы с этим ответом. Поскольку возражений нет, я выбираю его как правильное решение. Тем не менее, я делаю это с опасением, что я лично не проверял это, а пошел другим путем. - person Phil Freihofner; 22.11.2018