1. Обзор
В этом уроке мы рассмотрим различные жизненные циклы сборки Maven и их фазы.
Мы также обсудим основные отношения между целями и этапами.
2. Maven Build Lifecycle
Сборка Maven следует определенному жизненному циклу для развертывания и распространения целевого проекта.
Есть три встроенных жизненных цикла:
-
по умолчанию: основной жизненный цикл, так как он отвечает за проект
развертывание ** clean: очистить проект и удалить все файлы, созданные
предыдущая сборка ** site: создать документацию сайта проекта
-
Каждый жизненный цикл состоит из последовательности фаз. ** Жизненный цикл default сборки состоит из 23 фаз, так как это основной жизненный цикл сборки.
С другой стороны, жизненный цикл clean состоит из 3 фаз, а жизненный цикл site состоит из 4 фаз.
3. Maven Phase
-
Фаза Maven представляет собой этап жизненного цикла сборки ** Maven. Каждый этап отвечает за конкретную задачу.
Вот некоторые из наиболее важных этапов в жизненном цикле сборки default :
-
validate: проверить, вся ли информация, необходимая для сборки
имеется в наличии ** compile: компилировать исходный код
-
test-compile: скомпилируйте исходный код теста
-
test: запустить юнит-тесты
-
package: упаковывает скомпилированный исходный код в распространяемый формат
(баночка, война, …) ** integration-test: обработать и развернуть пакет, если необходимо запустить
интеграционные тесты ** install: установить пакет в локальный репозиторий
-
deploy: скопировать пакет в удаленный репозиторий
Полный список фаз каждого жизненного цикла можно найти в Maven Reference .
Этапы выполняются в определенном порядке. Это означает, что если мы запустим определенный этап с помощью команды:
mvn <PHASE>
-
Это не только выполнит указанную фазу, но и все предыдущие фазы. **
Например, если мы запустим фазу deploy , которая является последней фазой в жизненном цикле сборки default , которая также выполнит все фазы до фазы deploy , то есть всего жизненного цикла default :
mvn deploy
4. Maven Goal
-
Каждый этап представляет собой последовательность целей, и каждая цель отвечает за конкретную задачу. **
Когда мы запускаем фазу - все цели, связанные с этой фазой, выполняются по порядку.
Вот некоторые из фаз и целей по умолчанию, связанных с ними:
-
compiler: compile - цель compile из плагина compiler
привязан к фазе compile ** compiler: testCompile связан с фазой test-compile
-
surefire: test привязан к test фазе
-
install: install связан с фазой install
-
jar: jar и war: war связан с фазой package
Мы можем перечислить все цели, связанные с определенной фазой и их плагины, используя команду:
mvn help:describe -Dcmd=PHASENAME
Например, чтобы перечислить все цели, связанные с фазой compile , мы можем выполнить:
mvn help:describe -Dcmd=compile
И получить пример вывода:
compile' is a phase corresponding to this plugin:
org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
Что, как упоминалось выше, означает, что цель compile из плагина compiler связана с фазой compile .
5. Плагин Maven
-
Плагин Maven - это группа целей. ** Однако эти цели не обязательно связаны с одной и той же фазой.
Например, вот простая конфигурация плагина Maven Failsafe, который отвечает за запуск интеграционных тестов:
<build>
<plugins>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven.failsafe.version}</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Как мы видим, плагин Failsafe имеет две основные цели:
-
integration-test : запустить интеграционные тесты
-
verify : проверить все пройденные интеграционные тесты
Мы можем использовать следующую команду для перечисления всех целей в конкретном плагине :
mvn <PLUGIN>:help
Например, чтобы перечислить все цели в плагине Failsafe:
mvn failsafe:help
И на выходе это будет:
This plugin has 3 goals:
failsafe:help
Display help information on maven-failsafe-plugin.
Call mvn failsafe:help -Ddetail=true -Dgoal=<goal-name> to display parameter
details.
failsafe:integration-test
Run integration tests using Surefire.
failsafe:verify
Verify integration tests ran using Surefire.
-
Чтобы выполнить конкретную цель, не выполняя всю ее фазу (и предыдущие фазы) ** мы можем использовать команду:
mvn <PLUGIN>:<GOAL>
Например, чтобы запустить integration-test goal из плагина Failsafe, нам нужно запустить:
mvn failsafe:integration-test
6. Создание проекта Maven
Чтобы построить проект Maven, нам нужно выполнить один из жизненных циклов, выполнив один из их этапов:
mvn deploy
Это выполнит весь жизненный цикл default . Кроме того, мы можем остановиться на фазе install :
mvn install
Но обычно мы будем использовать команду:
mvn clean install
Чтобы очистить проект, сначала запустите жизненный цикл clean перед новой сборкой.
Мы также можем запустить только конкретную цель плагина:
mvn compiler:compile
Обратите внимание, что если мы попытались построить проект Maven без указания фазы или цели, это приведет к ошибке
----[ERROR]No goals have been specified for this build. You must specify a valid lifecycle phase or a goal
----
7. Заключение
В этой статье мы обсудили жизненные циклы сборки Maven, а также связь между фазами Maven и целями.