Maven жизненный цикл сборки
Жизненный цикл сборки Maven определяет процесс сборки и выпуска проекта и включает три стандартных жизненных цикла:
- clean: очищает проект
- default (или build): основной процесс сборки
- site: генерирует документацию проекта

Каждый жизненный цикл состоит из нескольких фаз, которые выполняются по порядку.
1. Жизненный цикл clean
Жизненный цикл clean отвечает за очистку временных файлов и каталогов проекта (в основном target/), и включает следующие основные фазы:
| Этап | Описание | Автоматически привязанные цели плагинов |
|---|---|---|
pre-clean | Работа, выполняемая перед очисткой | Нет привязки по умолчанию |
clean | Deletetarget/каталога | maven-clean-plugin:clean |
post-clean | Завершающая работа после очистки | Нет привязки по умолчанию |
Основные команды:
mvn clean # 执行clean阶段(包含pre-clean和clean)
2. Жизненный цикл по умолчанию
Жизненный цикл по умолчанию — самый важный жизненный цикл Maven, содержащий все основные этапы сборки и развёртывания проекта.
Типичный жизненный цикл сборки Maven состоит из следующей последовательности фаз:

| Этап | Действие | Описание |
|---|---|---|
| validate | Проверить проект | Проверить, что проект корректен и вся необходимая информация доступна. |
| compile | Выполнить компиляцию | На этой фазе завершается компиляция исходного кода. |
| test | Тест | Запустить тесты с использованием подходящего фреймворка модульного тестирования (например, JUnit). |
| package | Пакет | Упаковать скомпилированный код в распространяемый формат, например JAR или WAR. |
| verify | Проверить | Проверить результаты интеграционных тестов, чтобы убедиться, что качество соответствует стандартам. |
| install | Установка | Установить упакованный проект в локальный репозиторий для использования другими проектами. |
| deploy | Развертывание | Скопируйте итоговый пакет проекта в удаленный репозиторий, чтобы поделиться с другими разработчиками и проектами. |
Чтобы завершить жизненный цикл default, эти фазы (включая другие фазы жизненного цикла, не перечисленные выше) будут выполнены по порядку.
Зависимости фаз:

Основные команды:
mvn compile # 编译主代码 mvn test # 运行测试 mvn package # 打包(生成target/*.jar) mvn install # 安装到本地仓库(~/.m2/repository) mvn deploy # 部署到远程仓库(需配置distributionManagement)
3. Жизненный цикл site
Жизненный цикл site используется для генерации документации сайта проекта:
| Этап | Описание | Автоматически привязанные цели плагинов |
|---|---|---|
pre-site | Подготовка перед генерацией сайта | Нет привязки по умолчанию |
site | Генерация документации сайта проекта | maven-site-plugin:site |
post-site | Завершающие действия после генерации сайта | Нет привязки по умолчанию |
site-deploy | Развертывание сайта на сервере | maven-site-plugin:deploy |
Основные команды:
mvn site # 生成站点(输出在target/site/) mvn site-deploy # 部署站点(需配置site URL)
Сводка по жизненному циклу
Maven имеет следующие три стандартных жизненных цикла:
1. Жизненный цикл Clean:
- clean: Удаляет скомпилированные выходные файлы в целевой директории. Обычно выполняется перед сборкой, чтобы гарантировать, что проект начинается с чистого состояния.
2. Жизненный цикл по умолчанию (также известный как жизненный цикл сборки):
- validate: Проверяет корректность проекта, например, проверяет, правильна ли версия проекта.
- compile: Компилирует исходный код проекта.
- test: Запускает модульные тесты проекта.
- package: Упаковывает скомпилированный код в формат для распространения, например JAR или WAR.
- verify: Выполняет дополнительные проверки проекта для обеспечения качества.
- install: Устанавливает результат сборки проекта в локальный репозиторий Maven для использования другими проектами.
- deploy: Копирует результат сборки проекта в удалённый репозиторий для использования другими разработчиками или командами.
3. Жизненный цикл Site:
- site: Генерирует документацию проекта и информацию о сайте.
- deploy-site: публикует сгенерированную информацию сайта на удалённый сервер, чтобы делиться документацией проекта.
Фазы сборки состоят из целей плагинов
Цель плагина представляет собой конкретную задачу (более детализированную, чем фаза сборки), которая помогает в сборке и управлении проектом. Эти цели могут быть привязаны к нескольким фазам или вообще не привязаны ни к какой фазе. Цели, не привязанные ни к какой фазе сборки, могут выполняться вне жизненного цикла сборки путём прямого вызова. Порядок выполнения этих целей зависит от порядка вызванных целей и фаз сборки.
Например, рассмотрим следующую команду:
clean и package — это фазы сборки, а dependency:copy-dependencies — это цель.
mvn clean dependency:copy-dependencies package
Здесь сначала будет выполнена фаза clean, затем цель dependency:copy-dependencies, и наконец будет выполнена фаза package.
1. Жизненный цикл clean
Когда мы выполняем команду mvn post-clean, Maven вызывает жизненный цикл clean, который включает следующие фазы:
- pre-clean: выполняет некоторую работу, которую нужно завершить перед clean.
- clean: удаляет все файлы, созданные предыдущей сборкой.
- post-clean: выполняет некоторую работу, которую нужно сделать сразу после clean.
clean в mvn clean — это тот же clean, что и выше. В жизненном цикле, когда выполняется определённая фаза, все фазы перед ней также выполняются. То есть, если вы запустите mvn clean, будут выполнены следующие две фазы жизненного цикла:
pre-clean, clean
Если мы запустим mvn post-clean, будут выполнены следующие три фазы жизненного цикла:
pre-clean, clean, post-clean
Мы можем изменить операционное поведение этой части, определив цели в любой фазе жизненного цикла clean, описанного выше.
В следующем примере мы добавляем цель maven-antrun-plugin:run в фазы pre-clean, clean и post-clean. Таким образом, мы можем отображать текстовую информацию на каждой фазе жизненного цикла clean.
Мы создали файл pom.xml в каталоге C:\MVN\project.
Теперь откройте командную консоль, перейдите в каталог, содержащий pom.xml, и выполните следующую команду mvn.
C:\MVN\project>mvn post-clean
Maven начнет обработку и отобразит все фазы жизненного цикла clean.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-clean}]
[INFO] Executing tasks
[echo] pre-clean phase
[INFO] Executed tasks
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO] [antrun:run {execution: id.post-clean}]
[INFO] Executing tasks
[echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------Вы можете попробовать изменить команду mvn clean, чтобы отобразить pre-clean и clean, не выполняя никаких операций в фазе post-clean.
2. Жизненный цикл по умолчанию (сборка)
Это основной жизненный цикл Maven, используемый для сборки приложений, и включает следующие 23 фазы:
| Фаза жизненного цикла | Описание |
|---|---|
| validate (валидация) | Проверьте, что проект корректен и вся необходимая информация доступна для завершения процесса сборки проекта. |
| initialize (инициализация) | Инициализируйте состояние сборки, например, путем установки значений свойств. |
| generate-sources (генерация исходного кода) | Сгенерировать любой исходный код, который будет включён в фазу компиляции. |
| process-sources (обработка исходного кода) | Обработать исходный код, например, отфильтровать любые значения. |
| generate-resources (генерация файлов ресурсов) | Сгенерировать файлы ресурсов, которые будут включены в пакет проекта. |
| process-resources (обработка файлов ресурсов) | Скопировать и обработать ресурсы в целевой каталог, подготовившись к фазе упаковки. |
| compile (компиляция) | Скомпилировать исходный код проекта. |
| process-classes (обработка файлов классов) | Обработать файлы, сгенерированные компиляцией, например, выполнить улучшение и оптимизацию байт-кода для файлов классов Java. |
| generate-test-sources (генерация исходного кода тестов) | Сгенерировать любой исходный код тестов, который будет включён в фазу компиляции. |
| process-test-sources (обработать исходный код тестов) | Обработать исходный код тестов, например, отфильтровать любые значения. |
| generate-test-resources (сгенерировать файлы ресурсов тестов) | Создать файлы ресурсов для тестов. |
| process-test-resources (обработать файлы ресурсов тестов) | Скопировать и обработать ресурсы тестов в целевой каталог. |
| test-compile (скомпилировать исходный код тестов) | Скомпилировать исходный код тестов в целевой каталог тестов. |
| process-test-classes (обработать файлы классов тестов) | Обработать файлы, созданные при компиляции исходного кода тестов. |
| test (тест) | Запустите тесты с помощью подходящего фреймворка модульного тестирования (JUnit — один из них). |
| prepare-package (подготовка упаковки) | Выполните все необходимые операции для подготовки к упаковке перед самой упаковкой. |
| package (упаковка) | Упакуйте скомпилированный код в распространяемый формат, например файлы JAR, WAR или EAR. |
| pre-integration-test (перед интеграционным тестированием) | Выполните необходимые действия перед запуском интеграционных тестов. Например, настройте требуемое окружение. |
| integration-test (интеграционный тест) | Обработайте и разверните проект в среде, где можно запускать интеграционные тесты. |
| post-integration-test (после интеграционного тестирования) | Выполните необходимые действия после выполнения интеграционных тестов. Например, очистите среду интеграционного тестирования. |
| verify (проверка) | Выполните любые проверки, чтобы убедиться, что пакет проекта действителен и соответствует стандартам качества. |
| install (install) | Установите пакет проекта в локальный репозиторий, чтобы его можно было использовать как зависимость для других локальных проектов. |
| deploy (deploy) | Скопируйте итоговый пакет проекта в удалённый репозиторий, чтобы поделиться им с другими разработчиками и проектами. |
Есть несколько важных концепций, связанных с жизненным циклом Maven, которые необходимо объяснить:
Когда фаза вызывается с помощью команды Maven, например mvn compile, будут выполнены только все фазы до этой фазы включительно.
Различные цели Maven будут привязаны к разным фазам жизненного цикла Maven в зависимости от типа упаковки (JAR / WAR / EAR).
В следующем примере мы добавим цель maven-antrun-plugin:run к некоторым фазам жизненного цикла сборки. Так мы сможем отобразить текстовую информацию о жизненном цикле.
Мы уже обновили файл pom.xml в каталоге C:\MVN\project.
Теперь откройте командную консоль, перейдите в каталог, содержащий pom.xml, и выполните следующую команду mvn.
C:\MVN\project>mvn compile
Maven начнёт обработку и отобразит различные фазы жизненного цикла сборки вплоть до фазы compile.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [compile]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.validate}]
[INFO] Executing tasks
[echo] validate phase
[INFO] Executed tasks
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\project\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [antrun:run {execution: id.compile}]
[INFO] Executing tasks
[echo] compile phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Sat Jul 07 20:18:25 IST 2012
[INFO] Final Memory: 7M/64M
[INFO] ------------------------------------------------------------------
Вызов из командной строки
В среде разработки используйте следующую команду для сборки и установки проекта в локальный репозиторий.
mvn install
Эта команда последовательно выполняет фазы жизненного цикла по умолчанию (validate, compile, package и т. д.) перед выполнением фазы install. Нам достаточно вызвать только последнюю фазу, например install.
В среде сборки используйте следующий вызов для чистой сборки и развёртывания проекта в общий репозиторий.
mvn clean deploy
Эта команда также может использоваться в сценарии с несколькими модулями, то есть в проекте, содержащем несколько подпроектов. Maven выполнит команду clean для каждого подпроекта, а затем выполнит команду deploy.
3. Жизненный цикл site
Плагин Maven Site обычно используется для создания новых отчётных документов, развёртывания сайтов и т. д.
- pre-site: выполнить некоторую работу, которую необходимо завершить до генерации документации сайта.
- site: сгенерировать документацию сайта проекта.
- post-site: выполнить некоторую работу, которую необходимо завершить после генерации документации сайта, и подготовиться к развёртыванию.
- site-deploy: развернуть сгенерированную документацию сайта на определённый сервер.
Наиболее часто используемые здесь фазы — это фаза site и фаза site-deploy, которые используются для генерации и публикации сайта Maven. Это довольно мощная функция Maven, и менеджерам она очень нравится, потому что документация и статистика генерируются автоматически и отлично выглядят. В следующем примере мы добавим цель maven-antrun-plugin:run ко всем фазам жизненного цикла Site. Таким образом мы сможем отобразить всю текстовую информацию жизненного цикла.
Мы уже обновили файл pom.xml в каталоге C:\MVN\project.
Теперь откройте командную консоль, перейдите в каталог, содержащий pom.xml, и выполните следующую команду mvn.
C:\MVN\project>mvn site
Maven начнет обработку и отобразит различные фазы жизненного цикла Site вплоть до фазы site.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [site]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-site}]
[INFO] Executing tasks
[echo] pre-site phase
[INFO] Executed tasks
[INFO] [site:site {execution: default-site}]
[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Project Plugins" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.
[INFO] [antrun:run {execution: id.site}]
[INFO] Executing tasks
[echo] site phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Sat Jul 07 15:25:10 IST 2012
[INFO] Final Memory: 24M/149M
[INFO] ------------------------------------------------------------------``` Другие расширения