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

时间:2012-10-23 23:20:04

标签: eclipse maven maven-3 m2eclipse 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>

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

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

6 个答案:

答案 0 :(得分: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>

似乎org.eclipse.m2e:lifecycle-mapping是一个maven插件,用于在处理maven pom.xml时保存元数据与eclipse m2e插件进行通信,此信息用于告诉eclipse如何定义maven插件在pom.xml中,eclipse运行pom.xml作为eclipse UI的一部分。

答案 1 :(得分:4)

从m2e 1.4及更高版本开始: 您可以在pom(parent-pom或project-pom)中集成所需的生命周期配置,或者可以将信息集成到eclipse中的全局m2e配置中。 您还可以使用一些quickfix-actions来应用此更改。

最后一个选项是查找m2e-connectors或切换到具有集成m2e-support的不同maven-plugins的较新版本(例如,对于jaxb-plugins)。

这里(对于enforcer-plugin)我认为,pom中的定义是最简单的方法。

另请参阅:https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html

答案 2 :(得分:2)

对于那些在构建模型中配置IDE时遇到问题的人来说,只是一个FYI。请密切关注目前针对Kepler版本的增强请求:

错误350414:在项目pom.xml外部存储忽略的m2e连接器 https://bugs.eclipse.org/bugs/show_bug.cgi?id=350414

答案 3 :(得分:0)

对我而言,这是类似的问题

我有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,我已经完成了设置。希望这有助于某人。

答案 4 :(得分:0)

拥有多个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>
                        ...

答案 5 :(得分:0)

  

如何消除“maven-enforcer-plugin(goal”enforce“)被m2e”eclipse警告忽略?

虽然eclipse lifecycle-mapping插件在我的其他项目中起作用,但我目前正在使用我的隐蔽Eclipse在IntelliJ商店工作,我不想通过更改所有的pom文件来揭露自己包括组org.eclipse.m2e中的任何内容。

经过一些实验,我发现您可以通过更改Maven首选项中的生命周期映射来显示此警告。坦率地说,我并不是百分之百确定这是做什么的,但我没有看到任何副作用,所以...

  1. 在Eclipse中,转到:Preferences→Maven→Lifecycle Mappings。
  2. 点击Open workspace lifecycle mappings metadata,会在后台的标签中打开lifecycle-mapping-metadata.xml文件。我假设这个cooresponds到您的工作区subdir下的以下文件:

    .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更新项目,以查看警告消失。
  6. 希望这有帮助。