Как устранить "maven -forcecer-plugin" (цель "empce") игнорируется предупреждением m2e "затмением"?
Я настраиваю многомодульный родительский дочерний проект maven с использованием maven и eclipse m2e, я использую последние материалы из eclipse Juno SR1, который составляет m2e 1.2.0
родительский pom использует плагин forcecer, поэтому родительский pom.xml имеет следующее в разделе своего плагина
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.1.1</version>
<executions>
<!-- Enforce that all versions of a transative dependency must converge. -->
<execution>
<id>enforce</id>
<configuration>
<rules>
<DependencyConvergence />
</rules>
</configuration>
<goals>
<goal>enforce</goal>
</goals>
</execution>
<!-- Black list certain jars -->
<execution>
<id>enforce-banned-dependencies</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<bannedDependencies>
<excludes>
<exclude>
commons-logging:commons-logging
</exclude>
</excludes>
</bannedDependencies>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
Каждый из дочерних проектов имеет сообщение об ошибке maven-enforcer-plugin (goal "enforce") is ignored by m2e.
- В чем смысл этого сообщения?
- Как мне настроить вещи, чтобы избавиться от этого сообщения?
- Мне нужно настроить параметры проекта eclipse или параметры pom.xml?
Ответы
Ответ 1
Плагин eclipse maven запускает проект pom.xml файла, чтобы выяснить, как настроен проект maven и перевести конфигурацию maven pom.xml в конфигурацию eclipse. Pom.xml может ссылаться на произвольное количество плагинов maven, и каждый из этих плагинов может протекать в памяти или делать что-то вредное для затмения. Таким образом, по умолчанию плагин m2e eclipse игнорирует любые плагины maven, если у этих плагинов maven нет специального соединителя плагина m2e, который сообщает m2e, как интегрировать плагин maven в eclipse. В итоге m2e защищает JVM-процесс eclipse от багги-плагина maven, заявляя, что для каждого плагина maven должен быть соединитель m2e для соединения между maven и eclipse.
Итак, чтобы избавиться от предупреждения, я добавил следующее в раздел управления плагином родительского pom.xml
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<versionRange>[1.0.0,)</versionRange>
<goals>
<goal>enforce</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
Кажется, что org.eclipse.m2e:lifecycle-mapping
- это плагин maven, предназначенный для хранения метаданных для связи с плагином eclipse m2e, когда он обрабатывает maven pom.xml, и эта информация используется, чтобы сказать eclipse, что делать с плагинами maven, которые определены в pom.xml, когда eclipse запускает pom.xml как часть пользовательского интерфейса eclipse.
Ответ 2
От m2e версии 1.4 и выше:
Вы можете интегрировать необходимую конфигурацию жизненного цикла в pom (parent-pom или project-pom), или вы можете интегрировать информацию в глобальную конфигурацию m2e в eclipse.
Также у вас есть некоторые quickfix-действия для применения этих изменений.
Последняя опция - поиск сокетов m2e или переход на более новые версии различных maven-плагинов со встроенной поддержкой m2e (например, для jaxb-plugins).
Здесь (для принудительного плагина), я думаю, определение в pom является самым простым способом.
Смотрите также: https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html
Ответ 3
Просто FYI для тех из вас, у кого возникла проблема с настройкой вашей IDE в вашей модели сборки. Следите за этим запросом на улучшение, которое в настоящее время предназначено для выпуска Kepler:
Ошибка 350414: Хранить игнорируемые соединители m2e вне проекта pom.xml
https://bugs.eclipse.org/bugs/show_bug.cgi?id=350414
Ответ 4
Для меня это была аналогичная проблема
У меня был maven 3.0.3 и java 1.5
и мой pom имел
<executions>
<execution>
<id>enforce-versions</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>[3.0.3,2.2.1,)</version>
</requireMavenVersion>
<requireJavaVersion>
<version>[1.7, 1.8)</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
Как вы можете видеть, я действительно не встречал правил, поэтому я обновил Java и получил mvn, и я был настроен. Надеюсь, это поможет кому-то.
Ответ 5
Другая ошибка возникает при наличии нескольких pluginExecutionFilters. Они должны быть в нужном месте в pom.xml! Для меня было грубо найти, что не было никаких ошибок или предупреждений о существовании перемещения.
Это правильный код для наличия нескольких pluginExecutionFilters:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<versionRange>[1.0.0,)</versionRange>
<goals>
<goal>enforce</goal>
</goals>
</pluginExecutionFilter>
<action><ignore/></action>
</pluginExecution>
<!-- now here follows the new filter -->
<pluginExecution>
<pluginExecutionFilter>
<groupId>com.googlecode.maven-java-formatter-plugin</groupId>
...
Ответ 6
Как устранить "maven -forcecer-plugin" (цель "empce") игнорируется предупреждением m2e "затмением"?
Хотя плагин eclipse lifecycle-mapping
сработал для меня в других проектах, я не могу изменить pom.xml
поскольку в настоящее время я работаю в магазине IntelliJ с моим скрытым экземпляром Eclipse, и я не хочу показывать себя, изменяя все их файлы pom, чтобы включить что-нибудь из группы org.eclipse.m2e
.
После некоторых экспериментов я обнаружил, что это предупреждение можно не отображать, изменив сопоставления жизненного цикла в настройках Maven. Честно говоря, я не уверен на 100%, что это делает, но я не видел побочных эффектов, так что...
- В Eclipse перейдите по ссылке: "Настройки" → "Maven" → "Сопоставления жизненного цикла".
-
Нажмите кнопку Open workspace lifecycle mappings metadata
чтобы открыть файл lifecycle-mapping-metadata.xml
на вкладке в фоновом режиме. Я предполагаю, что это соответствует следующему файлу в вашем поддиректории рабочей области:
.metadata/.plugins/org.eclipse.m2e.core/lifecycle-mapping-metadata.xml
-
Затем добавьте следующий <pluginExecutions>...</pluginExecutions>
файла внутри <pluginExecutions>...</pluginExecutions>
.
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<versionRange>[1.0.0,)</versionRange>
<goals>
<goal>enforce</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
-
После сохранения файла XML вам нужно вернуться в окно настроек и нажать " Reload workspace lifecycle mappings metadata
которые каким-то образом компилируют файл.
- Наконец, вам нужно будет выполнить maven update-project для всех ваших проектов, чтобы предупреждения исчезли.
Надеюсь это поможет.