исполняемый файл, созданный с помощью jpackages, автоматически завершается ошибкой, если jar отсутствует

Мы упаковали наше приложение с помощью jpackage, и оно отлично работает.

Каким-то образом кто-то случайно удалил основную банку из установочного каталога. С тех пор ".exe" не запускался (очевидно). Проблема в том, что он не отображал никаких сообщений об ошибках, поэтому нам потребовалось время, чтобы понять, что было не так.

Есть ли способ заставить exe показать хоть какое-то полезное сообщение об ошибке?


person geert3    schedule 30.10.2020    source источник


Ответы (1)


Проблемы с EXE, сгенерированным jpackage, легче диагностировать, если вы активируете консоль с параметром jpackage --win-console.

Возможно, вы не захотите делать это для основного EXE приложения, поэтому вместо этого вы можете распространять свое приложение с помощью второй пусковой установки, у которой включена консоль и тот же основной класс. Просто создайте новый файл appwithconsole.properties и используйте:

jpackage --add-launcher debugversion=appwithconsole.properties ... rest of command line.

appwithconsole.properties

main-class=as.used.in.command.line
win-console=true

Затем попробуйте debugversion.exe после удаления jar-файла, он должен сообщать об ошибке более четко, чем EXE без консоли:

Error: Could not find or load main class ...
person DuncG    schedule 30.10.2020
comment
Это правда, что нам не нужна консольная опция для основного exe, но в целом наличие второго exe для диагностики проблем - довольно элегантное решение и, вероятно, единственное реальное решение на данный момент. Спасибо - person geert3; 01.11.2020
comment
Обратите внимание, что --add-launcher не работает в jpackage JDK15, но работает в JDK14 или 16EA - person DuncG; 21.12.2020
comment
Есть ли более официальный источник взлома --add-launcher в Java 15? Я переживаю это, и этот комментарий - единственное, что я могу найти, чтобы подтвердить, что я не сумасшедший. - person Tim; 11.03.2021
comment
Да, он был зарегистрирован как [bugs.openjdk.java.net/browse/JDK- 8253426]. Вы должны быть в порядке, используя jpackage из JDK14 или 16EA с вашими файлами сборки JDK15, если не хотите полностью обновлять или понижать версию, и в ближайшее время должен появиться соответствующий JDK16. - person DuncG; 11.03.2021