Лабораторно упражнение 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-controls
  • javafx-fxml
  • javafx-graphics

След Java 11 JavaFX вече не е част от стандартния JDK и трябва да бъде добавяна като външна зависимост.


Изисквания при пакетиране на JavaFX приложения

При пакетиране е необходимо:

  1. JavaFX модулите да бъдат включени;
  2. да бъде зададен module path;
  3. да бъдат посочени необходимите модули;
  4. да бъде осигурена 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 позволява автоматизирано създаване на професионално подготвени изпълними приложения, подходящи за реална употреба и разпространение.


Table of contents


This site uses Just the Docs, a documentation theme for Jekyll.