46

我正在使用 maven 和 eclipse m2e 配置一个多模块父子 maven 项目,我正在使用来自 eclipse Juno SR1 的最新内容,即 m2e 1.2.0

父 pom 使用强制插件,因此父 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 设置吗?
4

6 回答 6

56

eclipse maven 插件运行项目 pom.xml 文件,以了解如何配置 maven 项目并将 maven pom.xml 配置转换为 eclipse 配置。一个 pom.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 插件,旨在在处理 maven pom.xml 时保存元数据以与 eclipse m2e 插件通信,并且此信息用于告诉 eclipse 在 eclipse 运行时如何处理 pom.xml 中定义的 maven 插件pom.xml 作为 Eclipse UI 的一部分。

于 2012-10-24T06:14:16.680 回答
4

从 m2e 版本 1.4 及更高版本开始:您可以在 pom(父 pom 或 project-pom)中集成所需的生命周期配置,或者您可以将信息集成到 eclipse 中的全局 m2e 配置中。此外,您还有一些用于应用此更改的快速修复操作。

最后一个选择是寻找 m2e 连接器或切换到具有集成 m2e 支持的不同 maven 插件的新版本(例如,对于 jaxb 插件)。

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

另见:https ://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html

于 2014-10-10T16:34:06.360 回答
2

对于那些在构建模型中配置 IDE 有问题的人,仅供参考。密切关注当前针对 Kepler 版本的增强请求:

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

于 2012-12-20T18:40:47.640 回答
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,我已经准备好了。希望这可以帮助某人。

于 2013-06-05T17:45:59.190 回答
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>
                        ...
于 2013-09-11T16:38:51.977 回答
0

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

尽管 eclipselifecycle-mapping插件在其他项目中对我有用,但我无法更改,pom.xml因为我目前在 IntelliJ 商店使用我的 Eclipse 隐蔽实例工作,我不想通过将所有 pom 文件更改为来暴露自己包括来自 group 的任何内容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>.

    <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 以查看警告消失。

希望这可以帮助。

于 2018-03-01T16:35:04.003 回答