В чем разница/соотношение между целями и фазами Maven? Как они связаны друг с другом?
Каковы цели и фазы Maven и какова их разница?
Ответ 1
Цели выполняются поэтапно, что помогает определить, какие цели заказа выполняются. Лучшее понимание этого - посмотреть на привязки к жизненному циклу Maven по умолчанию, который показывает, какие цели получить запуск, в котором фазы по умолчанию. Цели этапа компиляции всегда будут выполняться до целей этапа тестирования, которые всегда будут выполняться до целей фазы пакета и т.д.
Часть путаницы усугубляется тем фактом, что при выполнении maven вы можете указать цель или фазу. Если вы укажете фазу, то maven будет запускать все фазы до фазы, указанной вами по порядку (например, если вы укажете пакет, он сначала будет проходить через фазу компиляции, а затем этап тестирования и, наконец, фазу упаковки), и для каждой фазы это будет запустите все цели, привязанные к этой фазе.
Когда вы создаете выполнение плагина в файле сборки Maven и указываете только цель, он привяжет эту цель к заданной фазе по умолчанию. Например, цель jaxb: xjc связывает по умолчанию фазу генерации ресурсов. Однако, когда вы укажете исполнение, вы также можете явно указать фазу для этой цели.
Если вы укажете цель, когда вы выполняете Maven, она все равно будет запускать все фазы до фазы для этой цели. Другими словами, если вы укажете цель jar, она будет запускать все фазы до фазы пакета (и всех целей на этих этапах), а затем она будет запускать цель jar.
Ответ 2
Жизненный цикл - это последовательность названных фаз.
Этапы выполняются последовательно. Выполнение фазы означает выполнение всех предыдущих фаз.Плагин представляет собой набор целей, также называемых MOJO (M aven O ld J ava O bject).
Аналогия: плагин - это класс, а цели - это методы внутри класса.
Maven основан на центральной концепции Build Life Cycles. Внутри каждого жизненного цикла сборки есть фазы сборки, а внутри каждой фазы сборки есть цели сборки.
Мы можем выполнить либо фазу сборки, либо построить цель. При выполнении фазы сборки мы выполняем все цели сборки в этой фазе сборки. Цели сборки назначаются одному или нескольким этапам сборки. Мы также можем выполнить цель сборки напрямую.
Существует три основных встроенных жизненных цикла сборки:
- дефолт
- чистый
- сайт
Каждый жизненный цикл сборки состоит из фаз
Например, жизненный цикл по 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 }
Для вышеприведенной команды, начиная с первой фазы, все фазы выполняются последовательно до фазы установки. mvn
может выполнить цель или этап (или даже несколько целей или несколько этапов) следующим образом:
mvn clean install plugin:goal
Однако, если вы хотите настроить префикс, используемый для ссылки на ваш плагин, вы можете указать префикс непосредственно через параметр конфигурации в maven-plugin-plugin
в POM вашего плагина.
Фаза сборки состоит из целей плагина
Большая часть функциональности Maven находится в плагинах. Плагин предоставляет набор целей, которые могут быть выполнены с использованием следующего синтаксиса:
mvn [plugin-name]:[goal-name]
Например, проект Java можно скомпилировать с помощью compile-plugin compile-goal, запустив mvn compiler:compile
.
Жизненный цикл сборки - это список именованных фаз, которые можно использовать для задания порядка выполнения цели.
Цели, предоставляемые плагинами, могут быть связаны с различными фазами жизненного цикла. Например, по умолчанию цель compiler:compile
связана с фазой compile
, а цель surefire:test
связана с фазой test
. Рассмотрим следующую команду:
mvn test
После выполнения предыдущей команды Maven выполняет все задачи, связанные с каждым из этапов, вплоть до этапа test
. В таком случае Maven запускает цель resources:resources
связанную с фазой process-resources
, затем compiler:compile
и т.д., surefire:test
наконец, не surefire:test
цель surefire:test
.
Однако, хотя этап сборки отвечает за конкретный этап жизненного цикла сборки, способ выполнения этих обязанностей может отличаться. И это делается путем объявления целей плагина, связанных с этими этапами сборки.
Цель плагина представляет собой конкретную задачу (более тонкую, чем фаза сборки), которая способствует созданию и управлению проектом. Он может быть привязан к нулю или большему количеству фаз сборки. Цель, не связанная с какой-либо фазой сборки, может быть выполнена вне жизненного цикла сборки путем прямого вызова. Порядок выполнения зависит от порядка, в котором вызываются цели и этапы сборки. Например, рассмотрим команду ниже. Аргументы clean
и package
являются фазами сборки, в то время как dependency:copy-dependencies
является целью (плагина).
mvn clean dependency:copy-dependencies package
Если это должно было быть выполнено, сначала будет выполняться clean
фаза (то есть она будет запускать все предыдущие фазы чистого жизненного цикла, плюс сама clean
фаза), а затем - dependency:copy-dependencies
цель dependency:copy-dependencies
, прежде чем наконец выполнить фазу package
(и все предыдущие этапы сборки жизненного цикла по умолчанию).
Более того, если цель связана с одним или несколькими этапами сборки, эта цель будет вызываться на всех этих этапах.
Кроме того, фаза сборки также может иметь ноль или более целей, связанных с ней. Если фаза сборки не имеет связанных с ней целей, эта фаза сборки не будет выполнена. Но если к нему привязана одна или несколько целей, он выполнит все эти цели.
Встроенные привязки жизненного цикла
Некоторые фазы имеют цели, связанные с ними по умолчанию. А для жизненного цикла по умолчанию эти привязки зависят от стоимости упаковки.
Maven Архитектура:
Пример Eclipse для Maven Lifecycle Mapping
Ответ 3
Определения подробно описаны на странице сайта Maven. Введение в жизненный цикл сборки, но я попытался подвести итог:
Maven определяет 4 элемента процесса сборки:
-
Жизненный цикл
Три встроенных жизненных цикла (или жизненные циклы сборки): по
default
,clean
,site
. (Ссылка на жизненный цикл) -
фаза
Каждый жизненный цикл состоит из фаз, например, для жизненного цикла по
default
:compile
,test
,package
,install
и т.д. -
Plugin
Артефакт, который обеспечивает одну или несколько целей.
В зависимости от типа упаковки (
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
Ответ 4
Выбранный ответ велик, но все же я хотел бы добавить что-то маленькое в тему. Иллюстрация.
Он наглядно демонстрирует, как разные фазы привязываются к различным плагинам и цели, которые раскрывают эти плагины.
Итак, рассмотрим случай запуска чего-то вроде mvn compile
:
- Это фаза, которая выполняет компилятор плагин с компилировать цель
- Плагин компилятора имеет разные цели. Для
mvn compile
он сопоставляется с определенной целью, целью компиляции. - То же самое, что и
mvn compiler:compile
Следовательно, фаза состоит из целей плагина.
Ссылка на ссылка
Ответ 5
Отдайте должное Сандипу Джиндалу и Премраю. Их объяснение помогает мне понять после некоторого замешательства.
Я создал несколько полных примеров кода и несколько простых объяснений здесь https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/. Я думаю, что это может помочь другим понять.
Короче говоря из ссылки, не стоит пытаться понять все три сразу, сначала вы должны понять отношения в этих группах:
- Жизненный цикл против фазы
- Плагин против цели
1. Жизненный цикл против фазы
Жизненный цикл представляет собой последовательность фаз в последовательности, см. Здесь ссылки на жизненный цикл. Когда вы вызываете фазу, она также вызывает всю фазу до нее.
Например, чистый жизненный цикл состоит из 3 этапов (предварительная очистка, очистка, последующая очистка).
mvn clean
Будем называть предварительно чистыми и чистыми.
2. Плагин против цели
Цель похожа на действие в плагине. Так что, если плагин - это класс, цель - это метод.
Вы можете назвать цель как это:
mvn clean:clean
Это означает "назовите чистую цель в чистом плагине" (здесь ничего не относится к чистой фазе. Не позволяйте слову "очистить" сбить вас с толку, они не совпадают!)
3. Теперь связь между этапом и целью:
Фаза может (предварительно) ссылаться на цель (и). Например, обычно чистая фаза связана с чистой целью. Итак, когда вы вызываете эту команду:
mvn clean
Он будет называть этап предварительной очистки и этап очистки, который связан с целью очистки: очистки.
Это почти так же, как:
mvn pre-clean clean:clean
Более подробно и полные примеры в https://www.surasint.com/maven-life-cycle-phase-and-goal-easy-explained/
Ответ 6
Я считаю, что хороший ответ уже предоставлен, но я хотел бы добавить простую для понимания диаграмму различных трех жизненных циклов (build
, clean
и build
site
) и этапов в каждом из них.
Фазы, выделенные жирным шрифтом, - это основные фазы, которые обычно используются.
Ответ 7
Рабочая терминология Maven с фазами и целями.
Фаза: фаза Maven - это набор действий, который связан с 2 или 3 голами.
exmaple: - если вы запустите mvn clean
это фаза будет выполнять цель mvn clean: clean
Цель: цель Maven, ограниченная фазой
для справки http://books.sonatype.com/mvnref-book/reference/lifecycle-sect-structure.html
Ответ 8
Существует три встроенных жизненных цикла сборки:
- дефолт
- чистый
- сайт
Жизненный цикл по умолчанию → [проверять, инициализировать, генерировать-источники, источники-процессы, генерировать-ресурсы, ресурсы-процессы, компилировать, классы-процессы, генерировать-тестировать-источники, обрабатывать-тестировать-источники, генерировать-тестировать-ресурсы, обрабатывать -test-resources, test-compile, process-test-classes, test, prepare-package, package, предварительный интеграционный тест, интеграционный тест, постинтеграционный тест, проверка, установка, развертывание]
Чистый жизненный цикл → [предварительная очистка, очистка, последующая очистка]
Сайт жизненного цикла → [pre-site, site, post-site, site-deploy]
Поток является последовательным, например, для жизненного цикла по умолчанию, он начинается с проверки, затем инициализации и так далее...
Вы можете проверить жизненный цикл, включив режим отладки mvn
т. mvn -X <your_goal>