Я написал последнюю часть данного учебника для того, чтобы показать вам, как развернуть (то есть упаковать и опубликовать) наше приложение AddressApp.
Часть 7: Содержание
- Развёртывание нашего JavaFX-приложения в виде нативного пакета (Native Package) с использованием плагина e(fx)clipse.
Что такое развёртывание
Развёртывание - это процесс упаковки и доставки программного обеспечения пользователю. Это важная часть процесса разработки ПО, так как здесь происходит первый контакт пользователя с нашим приложением.
Для того, чтобы проиллюстрировать кроссплатформенное преимущество данного языка программирования, Java рекламируется под слоганом “Написано однажды, работает везде”. В идеале это означает, что наше Java-приложение сможет запуститься на любом устройстве, где установлена виртуальная машина Java (JVM).
В прошлом, пользовательский опыт от установки приложений Java не всегда был радостным. Если у пользователя в системе не была установлена требуемая версия Java, он перенаправлялся для её установки. Это приводило к некоторым трудностям, например, к необходимости обладать правами администратора, к возникновению вопросов совместимости версий Java, и прочему.
К счастью, JavaFX предоставляет новую возможность развёртывания, называемую “нативная упаковка” (Native Packaging) (другое название - “Автономная упаковка приложения” (Self-Containde Application Package)). Нативный Пакет - это пакет, который вместе с приложением Java содержит и среду выполнения Java для конкретной платформы.
Официальная документация по JavaFX от Oracle содержит обширное руководство для всех возможных вариантов развёртывания приложений JavaFX.
В этой статье я покажу как создать “Нативную Пакет” с помощью приложения Eclipse и плагина e(fx)clipse.
Создание нативного пакета
Цель заключается в создании автономно-упакованного приложения, которое будет размещаться на компьютере пользователя в одной директории. То, как наше приложение будет примерно выглядеть в Windows можно посмотреть ниже:
В папке app
лежат данные приложения, а в папке runtime
- платформ-зависимая среда выполнения.
Для того, чтобы сделать процесс установки более комфортным для пользователя, мы предоставим ему установщик:
exe
-установщик для Windowsdmg
-установщик для MacOS.
Плагин e(fx)clipse поможет нам сгенерировать нативный пакет и установщик.
Шаг 1-й. Редактируем файл build.fxbuild
Файл build.fxbuild
используется плагином e(fx)clipse для генерации файла, который в свою очередь будет использоваться инструментом сборки Ant. (Если у вас нет файла build.fxbuild
, то создайте в Eclipse новый проект JavaFX и скопируйте оттуда сгенерированный файл).
Откройте файл
build.fxbuild
из корневой папки вашего проекта.Заполните все поля, помеченные звёздочками. Для владельцев MacOS: не используйте пробелы в названии приложения (в поле Application Title) так как это, похоже, приводит к проблемам).
Выберите формат упаковки: для Windows -
exe
, для MacOS -dmg
, или Linux -rpm
.Справа нажмите на ссылку
Generate ant build.xml only
.
Проверьте, была ли создана папка
build
с файломbuild.xml
.
Шаг 2. Добавляем в установщик иконки
Мы можем добавить в наш установщик пару красивых иконок:
- AddressApp.ico для иконки файла установщика
- AddressApp-setup-icon.bmp для экрана приветствия установщика
- AddressApp.icns - для установщика под MacOS
- AddressApp-volume.icns для рабочего стола Mac
- Создайте в папке
build
следующие подкаталоги:build/package/windows
(используется только в Windows)build/package/macosx
(используется только в MacOS)
- Из приведенных ссылок загрузите соответствующие иконки и поместите их в назначенные для них папки. В результате это должно выглядеть так:
- Важно: Имена иконок должны точно соответствовать имени приложения, которое вы указали в
build.fxbuild
:НазваниеВашегоПриложения.ico
НазваниеВашегоПриложения-setup-icon.bmp
НазваниеВашегоПриложения .icns
НазваниеВашегоПриложения-volume.icns
Шаг 3. Добавляем ресурсы
Наша папка resources
автоматически не будет скопирована автоматически. Мы должны вручную добавить её в папку build
:
- Создайте в папке
build
подкаталогdist
:build/dist
- Скопируйте папку
resources
(которая содержит иконки нашего приложения) вbuild/dist
.
Шаг 4. Редактируем build.xml и включаем в него иконки
Плагин e(fx)clipse сгенерировал файл build/build.xml
, который готов для выполнения Ant‘ом. Но пока наши иконки и изображения ресурсов работать не будут.
Пока (?) плагину e(fx)clipse нельзя указать, что нам необходимо включить дополнительные ресурсы, например папку resource
и иконки, которые мы добавили ранее. Нам необходимо сделать это вручную путём редактирования build.xml
:
Откройте build.xml
и найдите тег <path id="fxant">
. Добавьте одну строку для ${basedir}
(это сделает наши иконки доступными):
build.xml - добавляем “basedir”
<path id="fxant"> <filelist> <file name="${java.home}\..\lib\ant-javafx.jar"/> <file name="${java.home}\lib\jfxrt.jar"/> <file name="${basedir}"/> </filelist> </path>
Ниже найдите блок кода fx:resources id="appRes"
. Добавьте одну строку для наших ресурсов resources
:
build.xml - добавляем “resources”
<fx:resources id="appRes"> <fx:fileset dir="dist" includes="AddressApp.jar"/> <fx:fileset dir="dist" includes="libs/*"/> <fx:fileset dir="dist" includes="resources/**"/> </fx:resources>
По какой-то причине номер версии не добавляется в fx:application
, что всегда делает версию нашего установщика 1.0
(как указали несколько человек в комментариях). Для исправления этого, добавьте номер версии вручную (спасибо Марку, что выяснил это):
build.xml - добавляем “version”
<fx:application id="fxApplication" name="AddressApp" mainClass="ch.makery.address.MainApp" version="1.0" />
Теперь мы готовы запускать build.xml
через Ant. Это сгенерирует нам исполняемый jar-файл проекта. Но мы хотим пойти на шаг дальше и создать хороший установщик.
Шаг 5. EXE-установщик под Windows
С помощью утилиты Inno Setup можно создать установщик нашей адресной книги для Windows в виде единого .exe
-файла. Созданный .exe
-установщик будет устанавливать программу на уровне пользователя (не потребуются права администратора). Также он создаст ярлык (в меню или на рабочем столе).
Скачайте Inno Setup версии 5 или выше. Установите Inno Setup на ваш компьютер. Наш Ant-скрипт будет использоваться для автоматической генерации установщика.
Укажите системе Windows путь к Inno Setup (например,
C:\Program Files (x86)\Inno Setup 5
). Для этого добавьте Inno Setup в переменнуюPath
в переменных окружения системы. Если вы не знаете где их найти, почитайте Как установить пути и переменные окружения в Windows.Перезапустите приложение Eclipse и продолжите с шага 6.
Шаг 5. DMG-установщик для MacOS
Для создания dmg
-установщика под MacOS никаких дополнительных инструментов не потребуется.
Примечание: Для того, чтобы пользователь видел картинку установщика, следует назвать это изображение точно так же, как и наше приложение.
Шаг 5 (LINUX и другие). RPM-установщик для Linux
Для других способов упаковки приложения (msi
для Windows, rpm
для Linux) читайте эту статью или документацию от Oracle.
Шаг 6 - Запускаем build.xml
На последнем этапе мы запустим файл build.xml
с помощью Ant: кликните правой кнопкой мышки на файле build.xml
| Run As | Ant Build.
Сборка приложения займёт какое-то время (около 1 минуты на моём компьютере).
Если всё прошло удачно, вы должны найти нативные сборки в папке build/deploy/bundles
. Вот так выглядит версия для Windows:
Файл AddressApp-1.0.exe
может использоваться как единственный файл для установки приложения. Этот установщик скопирует нашу сборку в папку C:/Users/[yourname]/AppData/Local/AddressApp
.
Что дальше?
Надеюсь, что этот учебник поможет вам начать работать с JavaFX и с этого момента вы сможете писать собственные проекты JavaFX.
Я буду признателен любым отзывам. Если у вас есть какие-либо предложения, или если вам что-то не ясно, то не стесняйтесь писать комментарии.