如何消除"maven-enforcer-plugin(目标"强制执行")被m2e"eclipse警告忽略?

ams*_*ams 44 eclipse m2eclipse maven-3 maven m2e

我正在使用maven和eclipse m2e配置一个多模块父子maven项目,我正在使用来自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>
Run Code Online (Sandbox Code Playgroud)

每个子项目都有一条错误消息说 maven-enforcer-plugin (goal "enforce") is ignored by m2e.

  • 这条消息是什么意思?
  • 如何配置以消除此消息?
  • 我是否需要配置eclipse项目设置或pom.xml设置?

ams*_*ams 55

eclipse maven插件运行一个项目pom.xml文件,以便弄清楚如何配置maven项目并将maven pom.xml配置转换为eclipse配置.pom.xml可以引用任意数量的maven插件,并且每个插件都有可能泄漏内存,或者做一些对eclipse有害的事情.所以默认情况下,m2e eclipse插件会忽略任何maven插件,除非那些maven插件有一个特殊的m2e插件连接器,告诉m2e如何将maven插件集成到eclipse中.总而言之,m2e正在针对一个有害的maven插件来防御eclipse JVM进程,通过说每个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>
Run Code Online (Sandbox Code Playgroud)

它似乎org.eclipse.m2e:lifecycle-mapping是一个maven插件,用于在处理maven pom.xml时保存元数据与eclipse m2e插件进行通信,这个信息用于告诉eclipse当eclipse运行时,pom.xml中定义的maven插件有什么用? pom.xml是eclipse UI的一部分.

  • @ams你的答案就行了!但是......我将生命周期映射插件放在插件部分并且它不起作用,它需要在pluginManagement pom部分(如在您的示例中!)希望这可以节省一些烦人的分钟,试图找出原因解决方案不起作用. (3认同)