Eclipse отримав концепцію поступового нарощування. Це неймовірно корисно, оскільки це економить багато часу.
Чим це корисно
Скажімо, ви щойно змінили один .java-файл. Поступові будівельники зможуть скласти код, не вимагаючи перекомпілювати все (на що піде більше часу).
Тепер у чому проблема з Maven Plugins
Більшість плагінів Maven не розраховані на інкрементні нарощування, а значить, це створює проблеми для m2e. m2e не знає, чи є ціль плагіна важливою, чи вона не має значення. Якщо він просто виконує кожен плагін, коли змінюється один файл, це займе багато часу.
З цієї причини m2e покладається на інформацію метаданих, щоб визначити, як слід керувати виконанням. m2e запропонував різні варіанти надання цієї інформації метаданих, і порядок уподобань наведено нижче (найвищий до найнижчого)
- файл проекту pom.xml
- батьківські, прабатьківські тощо, файли pom.xml
- [m2e 1.2+] налаштування робочої області
- встановлені розширення m2e
- [m2e 1.1+] метадані відображення життєвого циклу, надані плагіном Maven
- Метадані для відображення життєвого циклу за замовчуванням поставляються з m2e
1,2 стосується вказівки розділу pluginManagement у тезі вашого pom-файлу чи будь-якого з батьків. M2E читає цю конфігурацію для налаштування проекту. Нижче фрагмент дає команду m2e ігнорувати jslint
та compress
цілі yuicompressor-maven-plugin
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings
only. It has no influence on the Maven build itself. -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
3) Якщо ви не хочете забруднювати ваш Pom-файл цими метаданими, ви можете зберігати його у зовнішньому XML-файлі (опція 3). Нижче наведено зразок файлу відображення, який вказує m2e ігнорувати jslint
та compress
цілі плагін yuicompressor-maven-plugin
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore/>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
4) Якщо вам не сподобається жоден із цих 3 варіантів, ви можете використовувати роз'єм m2e (розширення) для плагіну Maven. З'єднувач, у свою чергу, надасть метадані m2e. Ви можете побачити приклад інформації про метадані в роз'ємі за цим посиланням . Можливо, ви помітили, що метадані стосуються конфігуратора. Це просто означає, що m2e делегує відповідальність саме тому класу java, наданому автором розширення. Конфігуратор може налаштувати проект (наприклад, додати додаткові папки джерела тощо) та вирішити, чи виконувати фактичний плагін Maven під час інкрементальної збірки (якщо якщо не належним чином керувати в конфігураторі, це може призвести до нескінченних складання проектів)
Див ці посилання для прикладу configuratior ( link1 , link2 ). Тож у випадку, якщо плагіном є щось, чим можна керувати через зовнішній роз'єм, тоді ви можете встановити його. m2e підтримує список таких роз'ємів, внесених іншими розробниками. Це відоме як каталог відкриття. m2e запропонує встановити з'єднувач, якщо ви ще не маєте метаданих зіставлення життєвого циклу для виконання через будь-який із параметрів (1-6), а каталог виявлення має деяке розширення, яке може керувати виконанням.
На зображенні нижче показано, як m2e вимагає встановити з'єднувач для плагіну build-helper-maven.
.
5) m2e заохочує авторів плагінів підтримувати інкрементальне складання та постачання життєвого циклу в межах самого Maven-плагіна. Це означатиме, що користувачам не доведеться використовувати будь-які додаткові відображення життєвого циклу чи роз'єми. Деякі автори плагінів уже реалізували це
6) За замовчуванням m2e містить метадані відображення життєвого циклу для більшості часто використовуваних плагінів, таких як maven-компілятор-плагін та багато інших.
Тепер повернемося до питання: Ви, ймовірно, можете просто надати ігнорування відображення життєвого циклу в 1, 2 або 3 для тієї конкретної мети, яка створює проблеми для вас.