Статьи

Мавен с высоты птичьего полета

Одна из вещей, которые мы делаем ежедневно, — это использование Maven для создания наших проектов с помощью таких команд, как mvn install. Затем Maven просматривает конфигурационный файл нашего проекта, ласково известный как POM, волшебным образом выясняет, что делать, и, эй, прежде всего, ваша сборка завершена. Я полагаю, что мы делаем это так часто, что никогда не думаем о том, что происходит за кулисами, а в некоторых случаях даже не понимаем, что происходит.В этом блоге рассказывается о жизненном цикле сборки Maven с высоты птичьего полета и рассказывается, что происходит, когда вы запускаете такие команды, как mvn clean install.

Если вы когда-либо просматривали документацию Maven, то читали, что Maven — это иерархическая объектно-ориентированная структура сборки. В этом есть три основных артефакта: создание жизненных циклов, этапов сборки и целей, поэтому хорошим началом будет объяснение взаимосвязи между этими терминами. Посмотрите на следующую диаграмму UML:

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

Хороший способ определения фазы сборки — привести пример. Документация
Maven перечисляет то, что называется жизненным циклом по умолчанию, и вот его фазы сборки:

  1. validate — подтвердить правильность проекта и получить всю необходимую информацию
  2. compile — скомпилировать исходный код проекта
  3. test — протестируйте скомпилированный исходный код, используя подходящую среду модульного тестирования. Эти тесты не должны требовать, чтобы код был упакован или развернут
  4. package — взять скомпилированный код и упаковать его в распространяемый формат, такой как JAR.
  5. интеграционный тест — при необходимости обработайте и разверните пакет в среде, где можно проводить интеграционные тесты
  6. verify — выполнить любые проверки, чтобы проверить, что пакет действителен и соответствует критериям качества
  7. установить — установить пакет в локальный репозиторий, для локального использования в качестве зависимости в других проектах
  8. развертывание — выполняется в среде интеграции или выпуска, копирует окончательный пакет в удаленный репозиторий для совместного использования с другими разработчиками и проектами.

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

Вы можете указать Maven создать свой проект, указав этап сборки в командной строке. Например:

mvn install

… означает «выполнить все этапы сборки вплоть до этапа установки в жизненном цикле сборки по умолчанию».

… при выдаче

mvn clean install

… означает «перенести все этапы сборки в течение чистого жизненного цикла до фазы включенной сборки и включая ее, а затем выполнить все этапы сборки до и включая этап установки в жизненный цикл сборки по умолчанию».

Из этого можно сделать вывод, что выдача

mvn test

… команда выполнит этап проверки сборки, выполнив свои задачи; затем фаза компиляции, выполнение ее целей и, наконец, фаза тестирования, выполнение ее целей.

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

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

Вы также можете привязать свои собственные цели к фазам, используя элемент <plugin> в вашем POM-файле, это можно использовать либо для переопределения поведения цели по умолчанию, либо для добавления новых целей и нового поведения.

И последнее, что следует отметить в отношении целей, это то, что они обычно связаны с типом пакета вашего POM. Это имеет смысл, как, например, цель компилятора: компиляция связана с упаковкой jars и ejb, но будет бессмысленной с точки зрения пакетов POM, wars или ear.

Прочитав это, вы, возможно, поняли, что в соглашениях имена целей содержат двоеточие, а имена этапов сборки — нет. Это позволяет вам указывать цели в командной строке Maven, не путая их с фазами сборки. Например:

mvn compiler:compile 

… выполнит цель compiler: compile, которая находится на этапе сборки компилятора жизненного цикла сборки по умолчанию. И, смешивая вещи по частям …

mvn install tomcat:redeploy

… выполнит все этапы сборки, вплоть до установки, включая жизненный цикл сборки по умолчанию, за которым следует цель tomcat: redeploy, найденная в Tomcat Mojo.

И это с высоты птичьего полета Maven с высоты птичьего полета.


1
ИМЕЕТ в UML-смысле этого слова.

 

С http://www.captaindebug.com/2012/02/birdss-eye-view-of-maven.html