Maven жизненный цикл сборки

Жизненный цикл сборки Maven определяет процесс сборки и выпуска проекта и включает три стандартных жизненных цикла:

  • clean: очищает проект
  • default (или build): основной процесс сборки
  • site: генерирует документацию проекта

Каждый жизненный цикл состоит из нескольких фаз, которые выполняются по порядку.

1. Жизненный цикл clean

Жизненный цикл clean отвечает за очистку временных файлов и каталогов проекта (в основном target/), и включает следующие основные фазы:

ЭтапОписаниеАвтоматически привязанные цели плагинов
pre-cleanРабота, выполняемая перед очисткойНет привязки по умолчанию
cleanDeletetarget/каталога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.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.pre-clean</id> <phase>pre-clean</phase> <goals> <goal>запуск</цель> </цели> <конфигурация> <задачи> <echo>фаза pre-clean</echo> </задачи> </конфигурация> </выполнение> <выполнение> <id>id.clean</id> <фаза>clean</фаза> <цели> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>фаза clean</echo> </задачи> </конфигурация> </выполнение> <выполнение> <id>id.post-clean</id> <фаза>post-clean</фаза> <цели> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>фаза post-clean</echo> </задачи> </конфигурация> </выполнение> </выполнения> </плагин> </плагины> </сборка> </проекта>

Теперь откройте командную консоль, перейдите в каталог, содержащий 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.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.validate</id> <phase>validate</фаза> <цели> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>фаза validate</echo> </задачи> </конфигурация> </выполнение> <выполнение> <id>id.compile</id> <фаза>compile</фаза> <цели> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>фаза compile</echo> </задачи> </конфигурация> </выполнение> <выполнение> <id>id.test</id> <фаза>test</фаза> <цели> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>фаза test</echo> </задачи> </конфигурация> </выполнение> <выполнение> <id>id.package</id> <фаза>package</фаза> <цели> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>фаза package</echo> </задачи> </конфигурация> </выполнение> <выполнение> <id>id.deploy</id> <фаза>deploy</фаза> <цели> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>фаза deploy</echo> </задачи> </конфигурация> </выполнение> </выполнения> </плагин> </плагины> </сборка> </проекта>

Теперь откройте командную консоль, перейдите в каталог, содержащий 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.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.companyname.projectgroup</groupId> <artifactId>project</artifactId> <version>1.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>id.pre-site</id> <phase>pre-site</phase> <goals> <goal>запуск</цель> </цели> <конфигурация> <tasks> <echo>pre-site phase</echo> </задачи> </конфигурация> </выполнение> <execution> <id>id.site</id> <phase>site</phase> <goals> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>site phase</echo> </tasks> </configuration> </выполнение> <выполнение> <id>id.post-site</id> <phase>post-site</фаза> <цели> <цель>запуск</цель> </цели> <конфигурация> <tasks> <echo>post-site phase</echo> </задачи> </конфигурация> </выполнение> <execution> <id>id.site-deploy</id> <phase>site-deploy</phase> <goals> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>site-deploy phase</echo> </tasks> </configuration> </выполнение> </выполнения> </плагин> </плагины> </сборка> </проект>

Теперь откройте командную консоль, перейдите в каталог, содержащий 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] ------------------------------------------------------------------```
Другие расширения