Рубрики
Без рубрики

Беглый взгляд на упаковку

С Java 14 мы вернем инструмент для создания собственных установочных архивов для нашего Java-приложения… Помеченный java.

С 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”