С JPackage на Windows Можно ли сделать так, чтобы основной .exe не запускался как консоль, а другой лаучер запускался как консоль? - PullRequest
1 голос
/ 11 июля 2020

С 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

, затем это работает ks, но теперь при установке 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

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.

- модуль или -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 Ответ

0 голосов
/ 11 июля 2020

Надеюсь, кто-то другой сможет дать полный ответ, но я не думаю, что вы можете делать то, что хотите, в текущем JDK14 (и 15, судя по вашим наблюдениям). Насколько я понимаю, правила следующие:

  • Если вы удалите --win-console из jpackage.txt, тогда NO EXE будет иметь консоль.
  • Если вы добавите --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"), передавая любые аргументы командной строки.

...