Швидкий спосіб створити інсталятор для java програми

Вам ніколи не треба було швидко створити інсталятор для свого Java-додатка, але не хотілося витрачати на це купу часу, створюючи свій власний? Можливо, ви здивуєтеся, але в стандартному постачанні JDK7 такий інструмент вже присутня.

Короткий опис

javafxpackager - утиліта, створена для того, щоб створювати пакети з програм написаних за допомогою JavaFX. Через деякий час після створення в Oracle вирішили, що ця ж утиліта може створювати пакети і для програм, написаних чисто на Java. Назва вирішили не міняти.
Що подається на вхід? Ви можете подавати на вхід як директорію з уже скомпільованими кодами, так і вже зібраний jar. Далі jar запаковується разом із JRE і ви можете подавати це користувачеві з ще не встановленої java. Це дозволяє не змушувати користувача встановлювати JRE самостійно. Отже, як цим користуватися?

приклади використання

Припустимо, у нас є якийсь HelloWorld-проект: просто директорія src з вкладеною Директорією helloworld і в ній HelloWorld.java:

У корені лежить найпростіший ant'овий build.xml, який вміє тільки збирати class-файли:

Отже, просто зберемо проект:

За допомогою javafxpackager можна збирати jar'и, що ми і зробимо (попередньо створивши директорію dist):

Якщо подивитися на вміст створеного jar'a, ми побачимо, що він дещо відрізняється від стандартно створюваного:

Розпакувавши його і відкривши MANIFEST.MF, ми також побачимо, що метод включення теж дещо відрізняється від стандартного (він характерний для JavaFX):

Далі, перейдемо до самого створення пакетів. За замовчуванням директива deploy створює тільки jnlp і html з вбудованим плагіном.
Але якщо вказати директиву -native all, то створюється пакет, специфічний для даної операційної системи: deb і rpm для Linux (будь-яких, що містять dpkg або rpmbuild для кожного з пакетів відповідно), exe і msi для Windows (на жаль, тут існує обмеження і повинні бути встановлені наступні утиліти: Inno Setup для створення exe і WiX Toolset для msi) і app з dmg для MacOS X. Давайте відразу створювати нативні пакети (jar ми вже, імовірно, створили):

Після цього деякий час буде відбуватися складання. Тепер у нас в директорії dist з'явилися різні bundle'и: 2 пакетних (для різних ОС - різні) і 1, який є по суті розпакованим пакетом: директорія HelloWorld, в якій лежить бінарник HelloWorld, запускаючи який ми отримуємо відразу результат:

Цей код запускається з уже запакованій в директорії JRE.
А пакети можна вже встановлювати.

Але як додавати таку збірку в проект?

Є 2 способи: можна використовувати той же самий javafxpackager, додаючи його в ваші, наприклад, ant-скрипти, за допомогою, наприклад, exec'a. Але можна зробити куди крутіше. В ту ж поставку java входить пакет ant-javafx.jar, який дозволяє все це ж додавати у ваші ant-скрипти. Що для цього треба зробити?

  1. Додати підтримку ant-javafx: в кореневому елементі xml-дерева project встановити параметр

а в його тілі додати

при цьому у вас повинна бути встановлена ​​змінна $ в корінь JDK.
  • jar:
  • deploy:

    Що не працює?