С JPackage в Windows Можно ли сделать так, чтобы основной .exe не запускался как консоль, а другой лаучер запускался как консоль?
С JPackage я не могу получить опцию --win-console для работы отдельно для основной программы запуска, но я хочу, чтобы основная программа запуска не выводила на консоль, а имела отладочную версию, которая это делает.
т.е. если я бегу
jpackage --add-launcher SongKongDebug=jpackage.properties @jpackage.txt
jpackage.txt
-i C:\Code\jthink\SongKong\target\songkong-6.10
--runtime-image C:\code\jthink\songkong\JVM64
--main-class com.jthink.songkong.cmdline.SongKong
--name SongKong
--win-dir-chooser
--main-jar lib\SongKong-6.10.jar
--app-version 6.10
--install-dir Jthink\SongKong
--copyright "Copyright 2020 JThink Ltd, United Kingdom"
--license-file C:\Code\jthink\SongKong\src\main\scripts\license.txt
--java-options "-Dhttps.protocols=TLSv1.1,TLSv1.2"
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED"
--java-options "-XX:MaxRAMPercentage=75.0"
--java-options "-XX:MetaspaceSize=45 "
--java-options "-Dcom.mchange.v2.log.MLog=com.mchange.v2.log.jdk14logging.Jdk14MLog"
--java-options "-Dorg.jboss.logging.provider=jdk"
--java-options "-Djava.util.logging.config.class=com.jthink.songkong.logging.StandardLogging"
--vendor JThink
--win-menu
--win-shortcut
--win-menu-group Jthink
jpackage.properties
win-console=--win-console
тогда и SongKong, и SongKongDebug работают без консоли
Я также попытался изменить jpackage.properties (который предназначен для пар имя / значение), чтобы
--win-console
и это все еще не сработало
А если я добавлю
--win-console
в jpackage.txt и
win-console
в jpackage.properties
тогда SongKong будет работать как консоль, а SongKongDebug - нет, но для меня это неправильный путь.
Если я переименую SongKong в SongKongDebug и SongKongDebug в SongKong
например
jpackage --add-launcher SongKong=jpackage.properties @jpackage.txt
и изменитьset --name SongKongDebug
в jpackage.txt
тогда он работает, но теперь при установке SongKong он говорит, что установка SongKongDebug неверна.
Я пробовал как текущий выпуск Java 14, так и выпуски Java 15 и 16 раннего доступа, но без разницы.
Я обнаружил, что об этой ошибке сообщалось, но затем пользователь закрыл ее как без проблем https://bugs.openjdk.java.net/browse/JDK-8213717, и я нахожу помощь jpackage немного запутанной, поэтому мне интересно, не правильно ли я делаю это путь.
Помощь говорит
Варианты создания лаунчера (ов) приложений:
--add-launcher имя запуска = путь к файлу
Name of launcher, and a path to a Properties file that contains a list of key, value pairs (absolute path or relative to the current
каталог).
The keys "module", "add-modules", "main-jar", "main-class", "arguments", "java-options", "app-version", "icon", and "win-console"
может быть использован.
These options are added to, or used to overwrite, the original command line options to build an additional alternative launcher. The
Основное средство запуска приложения будет построено из параметров командной строки. С помощью этой опции можно создать дополнительные альтернативные пусковые установки, и этот вариант можно использовать несколько раз для создания нескольких дополнительных пусковых установок. --arguments аргументы основного класса
Command line arguments to pass to the main class if no command line arguments are given to the launcher. This option can be used multiple times.
--java-options параметры java
Options to pass to the Java runtime. This option can be used multiple times.
- имя класса основного класса
Qualified name of the application main class to execute. This option can only be used if --main-jar is specified.
--main-jar основной файл jar
The main JAR of the application; containing the main class (specified as a path relative to the input path). Either --module or --main-jar option can be specified but not both.
--module или -m имя модуля / основной класс]
The main module (and optionally main class) of the application This module must be located on the module path. When this option is specified, the main module will be linked in the Java runtime image. Either --module or --main-jar option can be
указаны, но не оба.
Таким образом, вы можете создать дополнительную пусковую установку с помощью --add-launcher и использовать файл свойств, но при этом звучит так, будто вы можете передавать дополнительные аргументы в качестве дополнительных параметров командной строки, но как это могло быть, если бы не было ясно, какая пусковая установка они относятся к?
1 ответ
Надеюсь, кто-то другой сможет дать полный ответ, но я не думаю, что вы можете делать то, что хотите, в текущем JDK14 (и 15, судя по вашим наблюдениям). Насколько я понимаю, правила следующие:
- Если вы удалите
--win-console
из jpackage.txt, тогда NO EXE не будет иметь console. - Если вы добавите
--win-console
в jpackage.txt, тогда у каждого launcher.properties есть win-console, если вы не добавитеwin-console
который выключает консоль. - В
--name XYZ
Параметр определяет основной EXE и метку, видимую при установке, и "Приложения и функции"
Поэтому у вас не может быть "SongKong\SongKong.EXE" в качестве неконсольного приложения и "SongKong\SongKongDebug.exe" в качестве консоли.
Вы можете приблизиться к тому, что хотите, но с ограничениями, связанными с новым --name
плюс манекен -main-class
. Это будет означать что-то вроде jpackage.txt:
--win-console
--install-dir Jthink\\SongKong
--name "JThink - SongKong"
--add-launcher SongKong=SongKong.properties
--add-launcher SongKongDebug=SongKongDebug.properties
... и SongKong.properties содержит это для выключения консоли:
win-console
Вышеупомянутое дает вам консольное приложение "Jthink\SongKong\JThink - SongKong.exe" с консолью, но вы также получаете "Jthink\SongKong\SongKong.exe" и "Jthink\SongKong\SongKongDebug.exe", как хотите - хотя не так, как вы хотите.
Конечно, вы можете установить --main-class
в jpackage.txt простой класс, который запускает не-консольный main.exe вызов Runtime.getRuntime().exec("SongKong.exe")
передача любых аргументов командной строки.