В Eclipse есть концепция инкрементальных сборок, что невероятно полезно, так как экономит много времени.
Как это полезно
Допустим, вы только что изменили один файл .java. Инкрементальные построители смогут компилировать код без необходимости перекомпилировать все (что займет больше времени).
Теперь в чем проблема с плагинами Maven
Большинство плагинов maven не предназначены для инкрементных сборок и, следовательно, создают проблемы для m2e. m2e не знает, важна ли цель плагина или нет. Если он просто запускает каждый плагин при изменении одного файла, это займет много времени.
Это причина, по которой m2e полагается на информацию метаданных, чтобы выяснить, как следует обрабатывать выполнение. m2e предлагает различные варианты предоставления этой информации метаданных, и порядок предпочтения указан ниже (от самого высокого до самого низкого).
- pom.xml файл проекта
- родительский, родительский и другие файлы pom.xml
- [m2e 1.2+] настройки рабочего пространства
- установлены расширения m2e
- [m2e 1.1+] метаданные сопоставления жизненного цикла, предоставляемые плагином maven
- метаданные сопоставления жизненного цикла по умолчанию, поставляемые с m2e
1,2 относится к указанию раздела pluginManagement в теге вашего файла pom или любого из его родительских. М2Э считывает эту конфигурацию , чтобы настроить на project.Below SNIPPET инструктирует m2e игнорировать jslint
и compress
цели yuicompressor-Maven-плагин
<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-плагин
<?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 во время инкрементной сборки (если неправильное управление в конфигураторе, это может привести к бесконечным сборкам проекта)
По этим ссылкам приведен пример конфигуратора ( ссылка1 , ссылка2 ). Так что, если плагином можно управлять через внешний разъем, вы можете его установить. m2e ведет список таких соединителей, предоставленный другими разработчиками, он известен как каталог обнаружения. m2e предложит вам установить коннектор, если у вас еще нет метаданных сопоставления жизненного цикла для выполнения с помощью любого из вариантов (1-6), а в каталоге обнаружения есть некоторое расширение, которое может управлять выполнением.
На изображении ниже показано, как m2e предлагает вам установить коннектор для build-helper-maven-plugin.
,
5) m2e призывает авторов плагинов поддерживать инкрементную сборку и предоставлять отображение жизненного цикла в самом maven-plugin. Это будет означать, что пользователям не придется использовать какие-либо дополнительные сопоставления жизненного цикла или соединители. Некоторые авторы плагинов уже реализовали это
6) По умолчанию m2e содержит метаданные отображения жизненного цикла для большинства часто используемых плагинов, таких как maven-compiler-plugin и многих других.
Теперь вернемся к вопросу: вы, вероятно, можете просто предоставить игнорирование сопоставления жизненного цикла в 1, 2 или 3 для той конкретной цели, которая создает для вас проблемы.