我正在使用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.
答案 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首选项中的生命周期映射来显示此警告。坦率地说,我并不是百分之百确定这是做什么的,但我没有看到任何副作用,所以...
点击Open workspace lifecycle mappings metadata
,会在后台的标签中打开lifecycle-mapping-metadata.xml
文件。我假设这个cooresponds到您的工作区subdir下的以下文件:
.metadata/.plugins/org.eclipse.m2e.core/lifecycle-mapping-metadata.xml
接下来将以下节添加到<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>
保存XML文件后,您需要返回首选项窗口并按Reload workspace lifecycle mappings metadata
以某种方式编译文件。
希望这有帮助。