Что делает фаза ‘package’ в жизненном цикле Maven?

«Что делает фаза ‘package’ в жизненном цикле Maven?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Фаза package — это этап жизненного цикла Maven, который компилирует код, запускает тесты и упаковывает скомпилированные артефакты в распределяемый формат (JAR, WAR, EAR и др.), указанный в элементе <packaging> POM-файла.

Типичный порядок фаз до package:

  1. validate – проверка корректности проекта.
  2. compile – компиляция исходного кода.
  3. test – выполнение модульных тестов.
  4. package – упаковка в JAR/WAR и т.д.

Пример:

# Выполнит все фазы до package включительно
mvn package

После выполнения в папке target/ появится файл, например, my-app-1.0.jar.

Важные нюансы:

  • Зависимости не включаются в итоговый JAR (если только не используется плагин для создания «fat jar», например, maven-assembly-plugin или spring-boot-maven-plugin).
  • Тип упаковки задаётся в pom.xml:
    <project>
      <packaging>war</packaging> <!-- или jar, ear, pom -->
    </project>
  • Для установки артефакта в локальный репозиторий используется фаза install, для публикации — deploy.