Лабораторно упражнение 13
Създаване на изпълним файл за JavaFX приложение с Maven и jpackage
Теоретична постановка
Пакетиране на софтуерно приложение
Пакетирането (Software Packaging) представлява процес на организиране, обединяване и подготовка на всички необходими компоненти на едно приложение с цел неговото разпространение, инсталиране и изпълнение извън средата за разработка.
По време на разработката едно Java приложение обикновено съдържа:
- изходен код (
.java); - компилирани файлове (
.class); - външни библиотеки;
- конфигурационни файлове;
- ресурсни файлове;
- зависимости;
- build скриптове.
Тези компоненти не представляват самостоятелно приложение, което може директно да бъде използвано от краен потребител. Поради тази причина се извършва процесът на пакетиране.
Основни цели на пакетиране
1. Обединяване на компонентите
Обединяването представлява процес на събиране на всички необходими файлове и зависимости в единна структура или архив.
Това включва:
- компилиран код;
- външни библиотеки;
- ресурси;
- конфигурации;
- runtime зависимости.
2. Подготовка за разпространение
Разпространението представлява процес на предоставяне на приложението на крайни потребители или други системи.
След пакетиране приложението може:
- да бъде копирано на друг компютър;
- да бъде инсталирано;
- да се стартира без необходимост от IDE.
3. Осигуряване на изпълнима среда
Изпълнима среда (Runtime Environment) е съвкупност от софтуерни компоненти, необходими за изпълнение на дадено приложение.
При Java приложения често е необходимо да се предостави:
- Java Runtime Environment (JRE);
- custom runtime image;
- необходимите JavaFX модули.
Това позволява приложението да работи независимо от наличието на предварително инсталирана Java среда.
Изпълним файл
Изпълним файл (Executable File) е файл, съдържащ машинни инструкции или стартиращ механизъм, който може директно да бъде изпълнен от операционната система.
Различните операционни системи използват различни формати за изпълними файлове.
| Операционна система | Формат |
|---|---|
| Windows | .exe |
| Linux | бинарен изпълним файл |
| macOS | .app |
Изпълнение на Java приложения
Архитектура на изпълнение
За разлика от приложенията, написани на езици като C или C++, Java приложенията не се изпълняват директно от операционната система.
Процесът протича в няколко етапа:
.java → .class → JVM
Етапи на изпълнение
1. Компилация
Изходният код (.java) се преобразува в байткод (.class) чрез Java компилатора (javac).
2. Изпълнение чрез JVM
Java Virtual Machine (JVM) е виртуална машина, която интерпретира и изпълнява Java байткод.
JVM осигурява:
- платформена независимост;
- управление на паметта;
- изпълнение на байткод;
- сигурност при изпълнение.
3. Стартиране на приложението
За улесняване на крайния потребител Java приложението може да бъде пакетирано като:
- JAR файл;
- executable application image;
- installer пакет.
JAR файл
JAR (Java ARchive) е архивен файл, използван за съхранение и разпространение на Java приложения и библиотеки.
JAR файлът съдържа:
.classфайлове;- ресурсни файлове;
- метаинформация;
- manifest файл.
Пример за JAR файл
my-app.jar
Стартиране на JAR файл
JAR файлът изисква:
- инсталирана Java среда;
- съвместима версия на Java;
- ръчно стартиране.
Пример:
java -jar my-app.jar
Executable Application Image
Executable Application Image представлява самостоятелно пакетирано приложение, което съдържа всички необходими компоненти за изпълнение.
Обикновено включва:
- изпълним файл;
- библиотеки;
- Java runtime;
- конфигурации;
- ресурсни файлове.
Предимства
Executable Application Image позволява:
- стартиране чрез двоен клик;
- независимост от инсталирана Java среда;
- по-лесно разпространение;
- по-добро потребителско изживяване.
Пример
DeveloperApp.exe
Сравнение между JAR файл и изпълним файл
| Характеристика | JAR файл | Изпълним файл |
|---|---|---|
| Изисква инсталирана Java | Да | Обикновено не |
| Начин на стартиране | Чрез команда | С двоен клик |
| Удобство за потребителя | По-ниско | По-високо |
| Съдържа runtime среда | Не | Да |
| Подходящ за крайни потребители | Ограничено | Да |
Пакетиране при JavaFX приложения
Специфика на JavaFX
JavaFX е платформа за разработка на графични потребителски интерфейси (GUI) и desktop приложения на езика Java.
JavaFX използва допълнителни модули, например:
javafx-controlsjavafx-fxmljavafx-graphics
След Java 11 JavaFX вече не е част от стандартния JDK и трябва да бъде добавяна като външна зависимост.
Изисквания при пакетиране на JavaFX приложения
При пакетиране е необходимо:
- JavaFX модулите да бъдат включени;
- да бъде зададен module path;
- да бъдат посочени необходимите модули;
- да бъде осигурена runtime среда.
Инструментът jpackage
jpackage е инструмент, предоставян от JDK, предназначен за създаване на инсталируеми и изпълними версии на Java приложения.
Основни функции на jpackage
Инструментът позволява:
- създаване на executable application image;
- генериране на installer;
- добавяне на custom runtime image;
- автоматизиране на процеса на пакетиране.
Maven и пакетиране
Maven е инструмент за автоматизация на процесите по компилация, управление на зависимости и изграждане на Java проекти.
Maven позволява:
- управление на библиотеки;
- автоматизирана компилация;
- създаване на JAR файлове;
- интеграция с
jpackage.
Примерен процес на пакетиране
1. Компилация
.java → .class
2. Създаване на JAR файл
.class → application.jar
3. Добавяне на зависимости и runtime
JavaFX + библиотеки + runtime
4. Генериране на executable image
DeveloperApp.exe
Заключение
Пакетирането представлява съществен етап от жизнения цикъл на софтуерното приложение, чрез който се осигурява неговото разпространение, инсталиране и изпълнение от крайни потребители.
При Java и JavaFX приложенията, пакетирането има особено важно значение, тъй като трябва да бъдат включени необходимите runtime компоненти и библиотеки.
Използването на инструменти като Maven и jpackage позволява автоматизирано създаване на професионално подготвени изпълними приложения, подходящи за реална употреба и разпространение.