Подтвердить что ты не робот

Как устранить "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?
4b9b3361

Ответ 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%, что это делает, но я не видел побочных эффектов, так что...

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

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

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

Надеюсь это поможет.