Eclipse имеет концепцию инкрементных сборок. Это невероятно полезно, так как экономит много времени.
Как это полезно
Скажем, вы только что изменили один файл .java. Инкрементные сборщики смогут скомпилировать код без необходимости перекомпиляции всего (что займет больше времени).
В чем проблема с плагинами Maven
Большинство плагинов maven не предназначены для инкрементных сборок и, следовательно, создают проблемы для m2e. m2e не знает, является ли цель плагина чем-то важным или не имеет значения. Если он просто запускает каждый плагин при изменении одного файла, это займет много времени.
По этой причине m2e полагается на информацию метаданных, чтобы выяснить, как должно выполняться выполнение. m2e предлагает различные варианты предоставления этой информации метаданных, и порядок предпочтений такой, как показано ниже (от высшего к низшему)
- pom.xml файл проекта
- parent, grand-parent и т. Д. 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 во время инкрементной сборки (если неправильно сконфигурирован в конфигураторе, это может привести к бесконечным сборкам проекта)
См. Эти ссылки для примера конфигурации ( link1 , link2 ). Так что, если плагин является чем-то, что может управляться через внешний разъем, вы можете установить его. m2e ведет список таких соединителей, предоставленных другими разработчиками. Это называется каталогом открытий. m2e предложит вам установить соединитель, если у вас еще нет метаданных отображения жизненного цикла для выполнения с помощью какой-либо из опций (1-6), а каталог обнаружения имеет некоторое расширение, которое может управлять выполнением.
На рисунке ниже показано, как m2e предлагает установить соединитель для build-helper-maven-plugin.
.
5) m2e поощряет авторов плагинов поддерживать добавочную компоновку и предоставлять сопоставление жизненного цикла в самом плагине maven. Это означает, что пользователям не придется использовать какие-либо дополнительные сопоставления жизненного цикла или коннекторы. Некоторые авторы плагинов имеют это уже реализовано
6) По умолчанию m2e содержит метаданные отображения жизненного цикла для большинства обычно используемых плагинов, таких как maven-compiler-plugin и многих других.
Теперь вернемся к вопросу: вы, вероятно, можете просто предоставить отображение игнорирования жизненного цикла в 1, 2 или 3 для той конкретной цели, которая создает проблемы для вас.