С Java 14 мы вернем инструмент для создания собственных установочных архивов для наших приложений Java. Хотя Java на клиенте, к сожалению, в наши дни не считается актуальной темой, очень важно, чтобы текущий пробел был снова закрыт. Раньше существовал инструмент командной строки под названием javafxpackager
, который позже был переименован в javapackager
и даже позже удален из JDK. java(fx)packager выполнял задачи, связанные с упаковкой и подписанием приложений Java и JavaFX, поэтому, когда JavaFX был отделен от JDK, имело смысл временно удалить и связанные инструменты. С помощью jpackage
возвращается свежая, переосмысленная и более общая реализация. Java 14 будет выпущена в марте 2020 года, поэтому то, что доступно сегодня, является предварительным (ранний доступ). Кроме того, пакет считается функцией инкубатора, поэтому даже то, что мы увидим в марте, может со временем измениться. Установка Java на Mac – это вопрос нескольких минут. После загрузки и распаковки архива просто переместите базовый каталог в /Library/Java/JavaVirtualMachines/
.
cd ~/Downloads tar xzf openjdk-14-ea+28_osx-x64_bin.tar.gz sudo mv jdk-14.jdk /Library/Java/JavaVirtualMachines
Знаете ли вы, что вы можете перечислить установленные версии Java с помощью /usr/libexec/java_home -V
? По умолчанию Mac будет использовать последнюю версию, поэтому после этой установки java -версия
напечатает что-то вроде openjdk версии “14-ea” 2020-03-17 . Тем не менее, ввод package
приведет к команда не найдена . Чтобы исправить это, вы могли бы добавить /Библиотека/Java/JavaVirtualMachines/jdk-14.jdk/Содержимое/Главная страница/bin
к ПУТЬ
. На данный момент я предлагаю просто использовать абсолютный путь при вызове инструмента, потому что вы передадите довольно много аргументов, поэтому создание небольшого сценария оболочки значительно облегчит вашу жизнь.
Взгляните на это:
#!/bin/sh JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-14.jdk/Contents/Home BASEDIR=/Users/thomas/Entwicklung/Bitbucket/clip4moni VERSION=`sed -n -e 's/.*VERSION = \"\(.*\)\".*/\1/p' < $BASEDIR/src/main/classes/com/thomaskuenneth/clip4moni/Clip4Moni.java` $JAVA_HOME/bin/jpackage --name Clip4Moni --icon $BASEDIR/artwork/Clip4Moni.icns --app-version $VERSION --type app-image --module-path $BASEDIR/build/modules -m main/com.thomaskuenneth.clip4moni.Clip4Moni
Я использую его для создания пакета приложений для своего приложения Clip 4 Money , небольшой инструмент для создания фрагментов текста, который находится в системном трее (Windows, Linux) или в строке меню (на Mac). Он основан на модулях Java. Хотя
package может работать и с обычными jars, я настоятельно рекомендую перенести ваш код на последние версии Java. В язык вошло так много приятных функций, что более чем жаль их не использовать. Теперь давайте пройдемся по сценарию, начиная с последней строки.
–name - это имя приложения.
–значок ссылается на файл значка.
–type определяет, какой тип архива должен быть создан, в данном случае это просто пакет приложений.
–module-path указывает, где расположены файлы модуля.
-m
--app-version
задает, ну, номер версии приложения, например 1.3.3
. Если вы посмотрите на мой сценарий, я выполняю забавно выглядящий вызов seed
. Позвольте мне объяснить. Я определяю версию приложения как константу String
. Поэтому я перехожу к исходному файлу, в котором находится определение, и читаю номер версии. Это входной сигнал:
... public static final String VERSION = "1.3.3"; ...
пакет
прост в использовании. Хотя он все еще находится в предварительном просмотре, он работал безупречно. Есть только одна незначительная вещь, которую я заметил. Частью пакета приложений Mac является файл с именем info.plist
, который содержит важную информацию о приложении. Он создается пакетом. В настоящее время он содержит следующие строки:
LSApplicationCategoryType Unknown
Основная идея, по-видимому, заключается в том, что разработчик редактирует файл. Но, используя синтаксис в моем скрипте, он создается на лету. Одним из решений может быть редактирование его после вызова package
. Но это может не сработать, если вы подпишете свое приложение (что можно сделать через package
). Еще одна вещь, которую я хотел бы видеть, – это возможность добавлять дополнительные записи. Мое приложение находится в строке меню, поэтому я хотел бы скрыть значок док-станции. Это делается следующим образом:
LSUIElement true
Было бы здорово указать такие записи в командной строке. Возможно, уже есть решения этой проблемы, поэтому, если вы, дорогой читатель, знаете, как это сделать, пожалуйста, скажите мне в комментариях.
Оригинал: “https://dev.to/tkuenneth/a-quick-look-at-jpackage-lli”