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

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

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

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

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

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

7 ответов


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

в частности:

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

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

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

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

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

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

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

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

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

ссылки:


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 исполнение

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

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

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

коротко: выполнение сообщает 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. Жизненный цикл vs фаза

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

например,чистый жизненный цикл имеет 3 фазы (пре-чистый, чистый, пост-чистый).

mvn clean

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

2. Плагин vs Goal

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

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

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(пре-чистый, чистый, пост-чистый) и 4(pre-site, site, post-site, site-deploy).
  • когда фаза жизненного цикла вызывается с помощью команды mvn, все предыдущие фазы выполняются последовательно один за другим.
  • фазы жизненного цикла сами по себе не имеют никакого возможности для выполнения некоторых задач, и они полагаются на плагины для выполнения задания.
  • в зависимости от проекта и типа упаковки, Maven связывает различные цели плагина с фазами жизненного цикла и цели выполнения возложенной на них задачи.

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

mvn-plugins-package-goal


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

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

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

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

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

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

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

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


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

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

Maven Lifecycles, Phases, Goals, Plugins


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

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

чистый жизненный цикл имеет 3 этапа: pre-clean, clean и post-clean. Фазы жизненного цикла по умолчанию и сайта такие же, как показано на рисунке.