8 ответов:
цели выполняются поэтапно, что помогает определить порядок выполнения целей. Лучшее понимание этого-посмотреть на привязки жизненного цикла Maven по умолчанию который показывает, какие цели запускаются в каких фазах по умолчанию. Цели фазы компиляции всегда будут выполняться перед целями фазы тестирования, которые всегда будут выполняться перед целями фазы пакета и так далее.
часть путаницы усугубляется тем, что при выполнении maven вы можно указать цель или участок. Если вы укажете фазу, то maven будет запускать все фазы до фазы, которую вы указали в порядке (например, если вы укажете пакет, он сначала пройдет через фазу компиляции, а затем фазу тестирования и, наконец, фазу пакета), и для каждой фазы он будет запускать все цели, связанные с этой фазой.
когда вы создаете выполнение плагина в своем файле сборки Maven, и вы только указываете цель, тогда он свяжет эту цель с заданной фазой по умолчанию. Например, JAXB: цель xjc по умолчанию привязывается к фазе создания ресурсов. Однако, когда вы указываете выполнение, вы также можете явно указать фазу для этой цели.
Если вы укажете цель при выполнении Maven, то он все равно будет работать все фазы до фазы для этой цели. Другими словами, если вы укажете цель jar, он будет запускать все фазы до фазы пакета (и все цели в этих фазах), а затем он будет запускать цель jar.
жизненный цикл представляет собой последовательность именованных этапы.
Фазы выполняются последовательно. Выполнение фазы означает выполнение всех предыдущих фаз.плагин представляет собой коллекцию цели также называется MOJO (Maven Old JАва Object).
Аналогия: плагин-это класс, а цели-это методы внутри класса.Maven основан на центральной концепции жизненного цикла сборки.
Существует три встроенных жизненных цикла сборки:
- по умолчанию
- очистить
- сайт
каждый жизненный цикл сборки состоит из фаз
например
defaultжизненный цикл состоит из следующих Собрать Фаз:◾validate - validate the project is correct and all necessary information is available ◾compile - compile the source code of the project ◾test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed ◾package - take the compiled code and package it in its distributable format, such as a JAR. ◾integration-test - process and deploy the package if necessary into an environment where integration tests can be run ◾verify - run any checks to verify the package is valid and meets quality criteria ◾install - install the package into the local repository, for use as a dependency in other projects locally ◾deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.таким образом, чтобы пройти через вышеуказанные фазы, мы просто должны вызовите одну команду:
mvn <phase> { Ex: mvn install }для приведенной выше команды, начиная с первой фазы, все фазы выполняются последовательно до фазы ‘install’.
mvnможно выполнить цель или фазу (или даже несколько целей или несколько фаз) следующим образом:, если вы хотите настроить префикс, используемый для ссылки на ваш плагин, вы можете указать префикс непосредственно через параметр конфигурации наmvn clean install plugin:goalmaven-plugin-pluginв своем плагина ПФЛ.фаза сборки состоит из плагин цели
большая часть функциональности Maven находится в плагинах. Плагин предоставляет набор цели это может быть выполнено с использованием следующего синтаксиса:
mvn [plugin-name]:[goal-name]например, проект Java может быть скомпилирован с целью компиляции плагина компилятора, запустив
mvn compiler:compile.build lifecycle-это список именованных фаз, которые можно использовать для предоставления приказ на выполнение цели.
цели, поставляемые плагинами, могут быть связаны с различными фазами жизненного цикла. например, по умолчанию цель
compiler:compileсвязан сcompileэтап, в то время как цельsurefire:testсвязан сtestэтап. Рассмотрим следующую команду:mvn testпри выполнении предыдущей команды Maven запускает все цели связанные с каждой из фаз до и включая
testэтап. В таком случае Maven запускаетresources:resourcesцель, связанная сprocess-resourcesэтап, затемcompiler:compileи так далее, пока, наконец, работаетsurefire:testцель.однако, даже если этап сборки отвечает за определенный этап жизненного цикла сборки, способ, которым он выполняет эти обязанности, может отличаться. И это делается путем объявления целей плагина, связанных с этими сборками фазы.
цель плагина представляет собой конкретную задачу (более тонкую, чем этап сборки), которая способствует созданию и управлению проектом. Он может быть привязан к нулю или более этапов сборки. Цель, не привязанная к какой-либо фазе сборки, может быть выполнена вне жизненного цикла сборки прямым вызовом. Порядок выполнения зависит от порядка, в котором вызываются цель(Ы) и фаза(ы) сборки. Например, рассмотрим следующую команду. Элемент
cleanиpackageаргументы строить фазы, в то время какdependency:copy-dependenciesцель (плагина).mvn clean dependency:copy-dependencies packageесли бы это было исполнено, то
cleanфаза будет выполнена первой (это означает, что она будет запускать все предыдущие фазы чистого жизненного цикла, а такжеcleanсама фаза), а затемdependency:copy-dependenciesцель, прежде чем, наконец, выполнивpackageфаза (и все ее предыдущие фазы сборки жизненного цикла по умолчанию).кроме того, если цель привязана к одной или нескольким фазам сборки, эта цель будет вызвана все эти фазы.
кроме того, этап сборки также может иметь ноль или более целей, связанных с ним. Если фаза сборки не имеет привязанных к ней целей, эта фаза сборки не будет выполняться. Но если у него есть одна или несколько целей, связанных с ним, он будет выполнять все эти цели.
встроенные привязки жизненного цикла
Некоторые фазы имеют цели, связанные с ними по умолчанию. И для жизненного цикла по умолчанию эти привязки зависят от упаковки значение.Архитектура Maven:
выбранный ответ отличный, но все же я хотел бы добавить что-то маленькое к теме. Иллюстрация.
это наглядно демонстрирует, как различные фазы привязаны к различным плагинам и цели, которые эти плагины выставляют.
Итак, давайте рассмотрим случай запуска чего-то вроде
mvn compile:
- это этап, которые выполняют компилятор плагин С компилировать цель
- плагин компилятора получил разные цели. Ибо
mvn compileОн сопоставляется с определенной целью, целью компиляции.- это то же самое, что работает
mvn compiler:compileтаким образом, фаза состоит из целей плагина.
ссылка ссылка
определения подробно описаны в страница сайта Maven введение в жизненный цикл сборки, но я старался подведем итоги:
Maven определяет 4 элемента процесса сборки:
жизненный цикл
три встроенных жизненных цикла (ака строить жизненные циклы):
default,clean,site. (жизненный цикл Ссылка)этап
каждый жизненный цикл составляет этапы, например,
defaultжизненный цикл:compile,test,package,installи т. д.плагин
артефакт, который обеспечивает одну или несколько целей.
на основе типа упаковки (
jar,warи т. д.) цели плагинов привязаны к фазам по умолчанию. (встроенный Привязки Жизненного Цикла)цель
задача (действие), которая выполняется. Плагин может иметь одну или несколько целей.
одна или несколько целей должны быть указаны, когда настройка плагина в POM. Кроме того, если плагин не имеет определенной фазы по умолчанию, указанные цели могут быть привязаны к фазе.
Maven можно вызвать с:
- фаза (например
clean,package)<plugin-prefix>:<goal>(например,dependency:copy-dependencies)<plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>(например,org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile)С одной или несколькими комбинациями любого или всех, например:
mvn clean dependency:copy-dependencies package
кредит Сандип Джиндал и Премрадж. Их объяснение помогает мне понять после путаницы об этом на некоторое время.
Я создал некоторые полные примеры кода и некоторые простые объяснения здесь https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/ . Я думаю, что это может помочь другим понять.
короче по ссылке, вы не должны пытаться понять все три сразу, сначала вы должны понять отношения в этих группы:
- жизненный цикл против фазы
- плагин против цели
1. Жизненный цикл против фазы
Жизненный Цикл это коллекция этап в последовательности см. здесь Ссылки На Жизненный Цикл. Когда вы называете этап, он также вызовет все этап перед ним.
например,чистый жизненный цикл имеет 3 фазы (предварительно чистят, чистят, пост-чистый!--20-->).
mvn cleanон позвонит предварительно очистите и очистить.
2. Плагин против цели
цель это как действие в плагин. Так что если плагин-это класс, цель-это метод.
вы можете назвать цель такой:
mvn clean:cleanЭто означает " вызов чистой цели, в чистом плагине "(ничего не относится к чистой фазе здесь. Не позволяйте слову "чистый" сбить вас с толку, они не то же самое!)
3. Теперь отношение между фазой и целью:
этап can (pre)ссылки на цель(s).Например, обычно чистая фаза связывается с чистой целью. Итак, когда вы вызываете эту команду:
mvn cleanОн будет вызывать предварительно чистую фазу и чистый участок на котором можно доехать до чистый:чистый гол.
Это почти то же самое как:
mvn pre-clean clean:cleanболее подробные и полные примеры находятся в https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/
рабочая терминология Maven, имеющая фазы и цели.
фаза: фаза Maven-это набор действий, который связан с 2 или 3 целями
exmaple: - если вы запустите mvn clean
это фаза будет выполнять цель mvn clean: clean
цель: цель Maven, ограниченная фазой
для справки http://books.sonatype.com/mvnref-book/reference/lifecycle-sect-structure.html
есть следующие три встроенных жизненных цикла сборки:
- по умолчанию
- очистить
- сайт
жизненный цикл по умолчанию -> [проверка, инициализация, генерация-источников, процесс-источников, генерировать ресурсы, процесс-ресурсов, систематизации, обработки-классов, создание тест-источников, процесс испытаний источников генерации-тест-ресурсы, процесс испытаний-ресурсов, тест-компиляции, процесс-тест-классы, испытания, готовить-пакет, пакет, предварительная интеграция-тестирования, интеграция-тест, пост-интеграции-тест, проверить, установить, развернуть]
жизненный цикл чистый -> [предварительно чистят, чистят, после очистки]
жизненный цикл -> [предварительно сайта, Сайт, должность-сайта, сайта-развернуть]
поток является последовательным, например, для по умолчанию жизненный цикл, он начинается с проверка, потом инициализации и так далее...
вы можете проверить жизненный цикл включив режим отладки
mvnт. е.mvn -X <your_goal>



Comments