С 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") передача любых аргументов командной строки.

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