Мевен: Життєвий цикл проти Фази проти Плагіна проти Голи
Відповідаючи пізно, лише щоб уточнити ще один рівень деталізації, відсутній у цій темі: виконання (цілі), які є найменшими одиницями побудови Мавена.
Отже, ми маємо цикли побудови (в основному, набір дій для конкретної загальної мети), які складаються з фаз (нижча деталізація, крок циклу), які можуть викликати набір налаштованих цілей, наданих певними плагінами . Тобто Maven є (також) виконавцем плагінів, кожен плагін може запропонувати одну або кілька цілей. Потім ви (також) вирішуєте, яка мета пов'язана з якою фазою, більшість разів у життєвому циклі за замовчуванням (без будь-якого, тобто за замовчуванням). Але ви можете насправді мати ще один рівень: страти (з тієї самої мети, з того ж плагіна або з різними цілями з різних плагінів)
Малюнок, який я підготував, щоб відновити ціле
І справді, так це показує 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
фази (не згадується, на жаль)>
- Я викликаю плагін (
artifactId
і version
)> Maven Compiler
- Я посилаюсь на його
compile
мету>
- як визначено
default-compile
виконанням
Це унікально, оскільки дійсно у вас може бути однакова ціль (одного і того ж плагіна), пов'язана з різними фазами або з тією ж фазою, але в різних виконаннях (тобто з різною конфігурацією). maven-compiler-plugin
, Наприклад, також використовується під час test-compile
фази (різні фази) для компіляції тестового коду ( з допомогою своєї testCompile
мети) в іншому виконанні ( default-testCompile
). Ви також можете скомпілювати (використовуючи той самий плагін і ціль) деякий автоматично згенерований код під час іншої фази, як визначено виконанням, яке ви вказали в POM (і, можливо, в іншій конфігурації).
Виконання за замовчуванням надається поза коробкою через прив'язки упаковки Maven , тобто за замовчуванням (і примушує конвенцію щодо конфігурації) Maven вже викликає певні цілі (стандартні плагіни) протягом певних етапів. Ідентифікатори виконання цих викликів за замовчуванням визначаються відповідно до певних умов .
Це також пояснює, чому, якщо ви дійсно хочете змінити поведінку за замовчуванням (прив'язку) збірки Maven, вам потрібно вказати (замінити) точно той самий ідентифікатор виконання у вашому POM для того ж плагіна. Наприклад, ви можете пропустити компіляцію, просто визначивши виконання maven-compiler-plugin
того ж default-compile
id, але прив'язаного до неіснуючої фази (або порожнього).
Щоб коротко сказати : виконання повідомляє Мейвіну, яку мету (ів) виконати, яку конфігурацію на якій фазі.
Деякі виконання файлів надаються за замовчуванням (прив'язування за замовчуванням), що пояснює, чому основний мінімальний пом із лише 6 рядків може вже зробити багато (компіляція, тест, пакет тощо): виконання цілей стандартних плагінів на певних етапах: це домовленість про конфігурація. Потім за допомогою pom.xml
конфігурації ви можете додати речі (виконання) до збірки або впливати на поведінку вже налаштованих плагінів (у цьому випадку жодного executions
розділу, але просто configuration
вистачить).
Так, ви можете пропустити цикли складання (та їх фази) та безпосередньо викликати цілі (плагіни). Уявіть наступне:
mvn compiler:compile
mvn compiler:testCompile
mvn surefire:test
mvn jar:jar
(ПРИМІТКА. Ви також можете викликати вбудований номер лише в одному дзвінку)
Тут ми складаємо код програми, код тесту, виконуємо тести та пакет: уявіть, наскільки це буде ручним, схильним до помилок, повторюваним та трудомістким. Конвенція щодо конфігурації допомагає нам: Мейвен впроваджує побудову життєвих циклів та фаз . Життєвий цикл за замовчуванням (без імені, тобто за замовчуванням) забезпечує ряд фаз, заснованих на кращих практиках та конвенціях (мантра Мавена).
Якщо ви хочете досягти того самого, як описано вище, просто запустіть: mvn package
і він автоматично складе, протестує і пакує ваш проект. Як? виклик плагінів. Тобто, фази - це змістовний і настроюваний набір виконань плагінів (цілей). Щоб зробити його ще більш стандартним, для кожної фази Maven спочатку викликає будь-яку попередню фазу, так що, наприклад, якщо ви хочете перевірити, ви обов'язково спершу складете.
ps зауважте, що вказуючи кілька цілей на одну і ту ж execution
, ви все одно чітко побачите в журналі складання два різні виконання (з однаковим ідентифікатором) для двох різних цілей (отже, все ще унікальний кортеж).