Мэйвен: жизненный цикл и фаза и плагин и цель [закрыт]


относительно новый разработчик здесь, хотя я использую его некоторое время, я надеюсь укрепить свои основы Maven. Часть моей проблемы в том, что у меня есть нет опыт работы с муравьем, который, кажется,откуда берутся многие объяснения. Я читал и смотрел учебники, и я продолжаю слышать одни и те же термины:

  • жизненный цикл
  • этап
  • плагин
  • цель

из того, что я узнал, это кажется, что жизненный цикл является самым широким из группы и состоит из (или завершается) этапов, плагинов и/или целей.

вопрос: не могли бы вы предоставить какую-либо информацию о том, как эти термины связаны и наиболее распространенные примеры?

чем более явным и основным, тем лучше!

7 75

7 ответов:

@Дрейк это не является правильным в полном объеме.

в частности:

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

*предустановки - ...
*пост-пакета ...

вы можете просматривать цели как дополнительные" вставленные " фазы, если вы как.

[вычеркивает неверные утверждения мной.]

A жизненный цикл Maven это (абстрактное) понятие, которое охватывает все шаги (или лучше: все шаги, которые дизайнеры Maven решили поддержать)которые, как ожидается, произойдут в процессе разработки проекта. эти шаги (или этапы) составляют под названием этапы в терминологии Maven.

A Maven плагин контейнер для / поставщика целей. код, реализованный в целях, является настоящей рабочей лошадкой. (Maven в своей самой основной является только управление плагинов и цели выполнения). каждая из целей плагина может быть назначена/привязана к любой из фаз жизненного цикла.

при вызове mvn <phase>Maven проходит все фазы (каждый раз) и выполняет все цели (поставляемый плагинов) , которые были привязаны к любой из этапов до и до (и включая) данный этап. Если есть фаза без привязки к ней цели, то ничего не делается. Но фаза все же пройдена.

т. е. вы не можете " "вставить" дополнительные этапы" в один из встроенных жизненных циклов Maven. Они уже там, всегда! Вы можете разработать свой собственный жизненный цикл с его собственными фазами, но это далеко не просто использование Maven как есть.

фаз, называемых "предварительной установки" или "пост-пакет" отсутствуют.

ссылки:

Мэйвен: фазы жизненного цикла и между плагином и цель

отвечая поздно, просто чтобы уточнить еще один уровень детализации, отсутствующий в этой теме:казнь (цели), которые являются наименьшими единицами сборки Maven.

следовательно, у нас есть построить циклов (в основном, набор действий для конкретной общей цели), которые состоят из этапы (более низкая степень детализации, шаг цикла), который может вызвать набор из настроенных цели некоторых Плагины. То есть Maven является (также) исполнителем плагина, каждый плагин может предложить одну или несколько целей. Затем вы (также) решаете, какая цель привязана к какой фазе, в большинстве случаев в жизненном цикле defaul (без каких-либо, то есть по умолчанию). Но на самом деле у вас может быть еще один уровень: выполнение (той же цели, из того же плагина или разных целей из разных плагинов)

картина, которую я готов возобновить все enter image description here

и действительно, именно так Maven показывает его (самую маленькую единицу работы) через уникальную строку в своем журнале сборки:

plugin-artifactId:plugin-version:plugin-goal (goal-execution-id) @ project-name

например, у нас было бы:

[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ sample-project ---

что действительно означает (через различные уровни детализации):

  • во время compile фаза (не упоминается, к сожалению)>
  • я вызываю плагин компилятора Maven (artifactId и version)>
  • я вызываю его compile цель >
  • как определено default-compile исполнение

это уникально, потому что действительно у вас может быть одна и та же цель (одного и того же плагина), связанная с разными фазами или с одной и той же фазой, но в разных исполнениях (то есть с разными конфигурациями). Элемент maven-compiler-plugin, например, также используется во время test-compile этап (другая фаза) для компиляции тестового кода (через его testCompile гол) в другом исполнении (default-testCompile). Вы также можете скомпилировать (используя тот же плагин и цель) некоторый автоматически сгенерированный код во время другой фазы, как определено выполнением, которое вы указали в POM (и потенциально другой конфигурации).

исполнение по умолчанию предоставляется из коробки через Maven упаковка привязки, то есть по умолчанию (и соблюдение соглашения по конфигурации) Maven уже вызывает определенные цели (of стандартные плагины) на определенных этапах. Идентификаторы выполнения этих вызовов по умолчанию определяются в соответствии с определенных конвенций.

это также объясняет, почему, если вы действительно хотите переопределить поведение по умолчанию (привязку) сборки Maven, вам нужно указать (переопределить) точно такой же идентификатор выполнения в вашем POM для того же плагина. Вы можете, например, пропустить компиляцию, просто определив выполнение maven-compiler-plugin С таким же default-compile id но привязан к non существующая фаза (или пустая).

коротко: выполнение сообщает Maven, какую цель(ы) выполнить с какой конфигурацией в какой фазе.

некоторые исполнения предоставляются по умолчанию (defaul привязки), что объясняет, почему maven minimal pom просто 6 линии уже могут сделать много (компиляция, тест, пакет и т. д.): выполнение целей стандартных плагинов на определенных этапах: это соглашение закончено конфигурация. Затем, через pom.xml конфигурация вы можете добавить материал (выполнение) для сборки или влияния на поведение уже настроенных плагинов (в этом случае нет , а просто configuration будет достаточно).

Да, вы можете пропустить циклы сборки (и их фазы) и напрямую вызывать цели (плагинов). Представьте себе следующее:

mvn compiler:compile
mvn compiler:testCompile
mvn surefire:test
mvn jar:jar

(Примечание: Вы также можете вызвать inline только в одном вызове)

вот и мы компиляция кода приложения, тестового кода, выполнение тестов и пакета: представьте, как это было бы ручным, подверженным ошибкам, повторяющимся и трудоемким. Соглашение по конфигурации помогает нам: Maven вводит жизненные циклы сборки и этапы. Жизненный цикл по умолчанию (без имени, то есть по умолчанию) предоставляет ряд этапов, основанных на лучших практиках и соглашениях (мантра Maven).
Если вы хотите достичь того же, что и выше, просто запустите: mvn package и это будет автоматически скомпилируйте, протестируйте и упакуйте свой проект. Как? вызов плагинов. То есть фазы-это осмысленный и настраиваемый набор плагинов (целей) выполнения. Чтобы сделать его еще более стандартным, для каждой фазы Maven сначала вызовет любую предшествующую фазу, так что, например, если вы хотите проверить, вы будете уверены, что сначала скомпилируете.

p.s. обратите внимание, что при указании нескольких целей для одного и того же execution, вы все равно будете ясно видеть в журнале сборки два разных выполнения (с тем же идентификатором) для двух разные цели (следовательно, все еще уникальный кортеж).

кредит Сандип Джиндал и Премрадж (отсюда каковы цели и этапы Maven и в чем их разница?). Их объяснение помогает мне понять.

Я создал некоторые полные примеры кода и некоторые простые объяснения здесь https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/ . Я думаю, что это может помочь другим понять и попробовать что-то напрямую.

короче по ссылке, вы не должны пытаться понимаю, все три сразу, сначала вы должны понять отношения в этих группах:

  • жизненный цикл против фазы
  • плагин против цели

1. Жизненный цикл против фазы

Жизненный Цикл это коллекция этап в последовательности, см. здесь Ссылки На Жизненный Цикл. Когда вы называете этап, он также вызовет все этапы перед оно.

например,чистый жизненный цикл имеет 3 фазы (предварительно чистят, чистят, пост-чистый!--22-->).

mvn clean

он позвонит предварительно очистите и очистить.

2. Плагин против цели

цель это как действие в плагин. Так что если плагин-это класс, цель-это метод.

вы можете назвать цель такой:

mvn clean:clean

этот означает "вызов чистой цели, в чистом плагине" (здесь ничего не относится к чистой фазе. Не позволяйте слову "чистый" сбить вас с толку, они не то же самое! Смотрите полное объяснение в моей ссылке выше)

3. Теперь отношение между фазой и целью:

этап can (pre)ссылки на цель(s).Например, обычно чистая фаза связывается с чистой целью. Итак, когда вы вызываете эту команду:

mvn clean

он вызовет предварительно чистая фаза и чистая фаза, которая связана с чистой: чистой целью.

Это почти то же, что:

mvn pre-clean clean:clean

источник: http://www.codetab.org/apache-maven-tutorial/ , это действительно хороший учебник

жизненные циклы, фазы жизненного цикла, плагины и цели плагинов являются ядром Maven.

  • команда Maven mvn может принимать только фазу жизненного цикла или цель плагина в качестве аргумента.
  • Maven поставляется с тремя жизненными циклами-default, clean и site.
  • каждый жизненный цикл состоит из фаз жизненного цикла и в всего существует 28 фаз -по умолчанию 21(проверка ..., составлять. ,.., пакет. ,.., установить, развернуть),очистить 3(предварительно чистят, чистят, пост-чистый!--19-->) и 4(предварительно сайта, Сайт, должность-сайта, сайта-развернуть).
  • когда фаза жизненного цикла вызывается с помощью команды mvn, все предыдущие фазы выполняются последовательно друг за другом.
  • фазы жизненного цикла сами по себе не имеют никакого возможности для выполнения некоторых задач, и они полагаются на плагины для выполнения задания.
  • в зависимости от проекта и типа упаковки, Maven связывает различные цели плагина с фазами жизненного цикла а цели выполняют возложенную на них задачу.

когда мы запускаем "mvn пакет " в проекте Java Maven связывает цели плагина с этапами жизненного цикла, как показано на следующем рисунке.

mvn-plugins-package-goal

так, чтобы объяснить немного дальше, как описано здесь

сборки Maven разделены на жизненные циклы:

  • очистить
  • build (по умолчанию)
  • сайт

каждый из этих циклов разделен на фазы. Например, сборка разделена на фазы, такие как:

  • подготовить ресурсы
  • compile
  • пакета
  • установить

фазы имеют цели для запуска до предварительно или после после фаза, например:

  • pre-clean-будет выполняться до фазы clean
  • post-clean-будет выполняться после фазы очистки

вы можете просматривать цели как дополнительные "вставленные" фазы, если хотите. Читай здесь или @Gerolds ответ для сведения.

и запоздало еще одна диаграмма

  • жизненный цикл как желтые прямоугольники
  • этапы жизненных циклов в виде синих прямоугольников с "отзывной" фазы более темного синего цвета (т. е. фазы с гипенацией обычно не вызываются из командной строки, поскольку они не могут быть разработаны, чтобы оставить проект в четко определенном состоянии).
  • цели как голубые таблетки. Ассоциация / привязка " фаза - > цель" показан один из "банок"упаковка режим. Каждый этап может иметь цели, связанные с ним. Это справедливо, конечно, для каждого из жизненных циклов, хотя привязки отображаются только для жизненного цикла "по умолчанию".
  • Плагины как серые обрезанные прямоугольники. Плагины обеспечивают цели, которые могут быть привязаны к фазам.

Maven Lifecycles, Phases, Goals, Plugins

жизненный цикл против участка: Life Cycle Это коллекция phases. Когда вы вызываете фазу, она также вызывает все фазы, которые предшествуют ей. Maven поставляется с 3 встроенными жизненными циклами сборки как:

  1. Clean lifecycle-это включает в себя очистку проекта (для новой сборки и развертывания)
  2. жизненный цикл по умолчанию/сборки-это обрабатывает полное развертывание проекта
  3. жизненный цикл сайта-это обрабатывает создание документации java проект. enter image description here

очистить жизненный цикл имеет 3 фазы: предварительной очистки, очистки и после очистки. Фазы жизненного цикла по умолчанию и сайта такие же, как показано на рисунке.