
Я написал последнюю часть данного учебника для того, чтобы показать вам, как развернуть (то есть упаковать и опубликовать) наше приложение 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.
Я буду признателен любым отзывам. Если у вас есть какие-либо предложения, или если вам что-то не ясно, то не стесняйтесь писать комментарии.