Логотип Workflow

Article

Updated at:

Stage 8: Packaging JAR and WAR Applications

Этап 8 - Packaging: создание JAR и WAR приложений

Компиляция создает .class-файлы, но для развертывания нужен готовый артефакт. Packaging определяет, какой файл будет создан и как запуск приложения его запустит.

Упаковка - это шаг, который превращает скомпилированный код и ресурсы в архив: JAR, WAR или исторически EAR. Для современных Spring Boot сервисы чаще всего результатом является executable JAR.

Этап 8 - Packaging: создание JAR и WAR приложений

Какую проблему это решает

JAR - ZIP-like архив с classes, resources и metadata. Manifest может задавать Main-Class, classpath details и другую metadata. Обычный thin JAR может требовать external зависимости в classpath.

WAR предназначен для deployment в servlet container. У него структура с WEB-INF, classes, библиотеки и web resources. Старые enterprise deployments часто использовали WAR files, развернутые во внешний Tomcat или приложение server.

EAR - enterprise архив для упаковки нескольких Java EE модули вместе. Современный Spring Boot backend редко начинается с EAR, но термин полезно узнавать в legacy systems.

Fat JAR включает приложение code и зависимости в один архив. Thin JAR содержит в основном приложение code и ожидает зависимости снаружи. Spring Boot executable JAR имеет специальную layout и launcher, чтобы работало java -jar app.jar.

Выбирай JAR для большинства standalone Spring Boot сервисы и containerized deployments. Выбирай WAR, если организация требует deployment в существующий servlet container.

Последовательность шагов

  1. compiled classes.
  2. resources.
  3. manifest.
  4. jar/war.
  5. запуск приложения.

Эта последовательность - картинка в голове, с которой нужно читать файлы сборки. Названия в Maven и Gradle отличаются, но практический вопрос одинаковый: какой входные данные используется, какая задача запускается, какой результат получается и где этот результат хранится.

Конкретный пример

mvn package
java -jar target/orders-1.0.0.jar

./gradlew bootJar
java -jar сборка/libs/orders.jar

Полезная таблица

ПонятиеЗначение
JARОбычный Java архив; часто для библиотеки и standalone apps.
Executable JARJAR, который запускается через java -jar.
WARWeb архив для servlet containers.
EAREnterprise архив для legacy Java EE упаковка.
Fat JARArchive, включающий зависимости.
Thin JARArchive, ожидающий зависимости снаружи.

Где это встречается в работе

Packaging - не косметический выбор. Он определяет, как приложение запускается, где живут зависимости и какая infrastructure нужна.

В командной разработке знание сборки - не необязательная теория. Оно влияет на локальный development, время CI, зависимость upgrades, стабильность релиз и debugging. Когда Spring сервис не стартует после изменения зависимость, CI скачивает другую библиотека версия или артефакт не получается deployed, ответ обычно находится в сборка настройка, зависимость graph, упаковка step или репозиторий setup.

Частые ошибки

  • Копировать настройка, не понимая, на какой слой сборка она влияет.
  • Считать локально успешный сборка доказательством, что CI и production delivery тоже сработают.
  • Игнорировать зависимость trees, сгенерированный результат и репозиторий rules до момента failed релиз.
  • Смешивать приложение запуск приложения настройка и сборка-time настройка.

Чеклист понимания

  • Я могу объяснить главные terms этой статьи, не перечитывая сборка file вслух.
  • Я могу нарисовать последовательность от исходный код до артефакт для этой темы.
  • Я могу назвать command или file, который первым проверю при сборка problem.

Вопросы для самопроверки

  1. Какую проблему этот сборка concept решает в реальном Java или Spring проект?
  2. Какой file или command быстрее всего даст evidence, когда что-то ломается?
  3. Какая ошибка заставит сборка работать локально, но падать в CI или у другого разработчик?

Практика перед следующим уроком

Соберите JAR через Maven или Gradle и посмотрите папку с результатом. Найдите имя артефакта, расширение файла и команду, которой его можно запустить. Если файл не запускается, определите, какой настройки упаковки или плагина не хватает.

Авторизуйтесь чтоб пройти тесты

Practice

Интерактивная практика

Выполните задания и сразу проверьте ответ.