Как устранить "Maven-enforcer-plugin (цель "enforce") игнорируется m2e " предупреждение eclipse?

я настраиваю многомодульный Родительский Дочерний проект maven с использованием maven и eclipse m2e, я использую последние материалы из eclipse Juno SR1, который является m2e 1.2.0

Родительский pom использует плагин enforcer, поэтому родительский 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?

6 ответов


плагин eclipse maven запускает проект pom.xml-файл для того, чтобы выяснить, как настроен проект maven и перевести Maven pom.конфигурация xml в конфигурацию eclipse. ПФЛ.xml может ссылаться на произвольное количество плагинов maven, и каждый из этих плагинов имеет потенциал утечки памяти или делает вещи, которые вредны для eclipse. Поэтому по умолчанию плагин m2e eclipse игнорирует любые плагины maven, если эти плагины maven не имеют специального разъема плагина m2e, который сообщает m2e как интегрировать плагин maven в eclipse. В резюме m2e защищает процесс eclipse JVM от багги 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.


от версии 1.4 m2e и выше: Вы можете интегрировать необходимую конфигурацию жизненного цикла в pom (parent-pom или project-pom) или интегрировать информацию в глобальную конфигурацию m2e в eclipse. Также у вас есть некоторые quickfix-действия для применения этих изменений.

последний вариант-искать m2e-разъемы или переключаться на более новые версии различных Maven-плагинов со встроенной поддержкой m2e (например, для JAXB-плагинов).

здесь (для enforcer-plugin) я думаю, что определение в pom-самый простой способ.

см. также:https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html


просто FYI для тех из вас, у кого есть проблема с настройкой IDE в вашей модели сборки. Следите за этим запросом на улучшение, который в настоящее время предназначен для выпуска Kepler:

ошибка 350414: магазин игнорировал разъемы m2e вне проекта pom.в XML https://bugs.eclipse.org/bugs/show_bug.cgi?id=350414


для меня это была аналогичная проблема

У меня был maven 3.0.3 и java 1.5

и мой пом имел

<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, и я был настроен. Надеюсь, это кому-то поможет.


еще одна ловушка существует при наличии нескольких pluginExecutionFilters. Они должны быть в нужном месте в ПОМ.в 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>
                        ...

как устранить "Maven-enforcer-plugin (цель "enforce") игнорируется m2e " предупреждение eclipse?

хотя затмение lifecycle-mapping плагин работал для меня в других проектах, в настоящее время я работаю в магазине IntelliJ с моим скрытым Eclipse, и я не хочу подвергать себя риску, изменяя все свои файлы pom, чтобы включить что-либо из группы org.eclipse.m2e.

после некоторых экспериментов, я обнаружил, что вы можете получить это предупреждение, чтобы не показать вверх, изменив сопоставления жизненного цикла в настройках Maven. Честно говоря я не на 100% уверен, что это делает, но я не видел никаких побочных эффектов так...

  1. в Eclipse перейдите к: Настройки &rightarrow; Maven & Rightarrow; сопоставления жизненного цикла.
  2. нажмите кнопку Open workspace lifecycle mappings metadata которая откроет lifecycle-mapping-metadata.xml файл на вкладке в фоновом режиме. Я предполагаю, что это cooresponds на следующий файл в вашей рабочей области подкаталог:

    .metadata/.plugins/org.eclipse.m2e.core/lifecycle-mapping-metadata.xml
    
  3. затем добавьте следующую строфу в нижнюю часть файла внутри <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>
    
  4. после сохранения XML-файла вам нужно будет вернуться в окно настроек и нажать Reload workspace lifecycle mappings metadata который каким-то образом компилирует файл.

  5. наконец, вам нужно будет сделать обновление-Maven-проекта на всех ваших проектах, чтобы увидеть предупреждения уходят.

надеюсь, что это помогает.