如何使“maven-enforcer-plugin(goal”强制执行“)被m2e忽略”eclipse警告?

我正在configuration一个使用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.

  • 这条信息的含义是什么?
  • 我如何configuration东西来摆脱这个消息?
  • 我需要configurationeclipse项目设置还是pom.xml设置?

eclipse maven插件运行项目pom.xml文件,以便弄清maven项目是如何configuration的,并将maven pom.xmlconfiguration转换为eclipseconfiguration。 一个pom.xml可以引用任意数量的maven插件,每个插件都有可能泄漏内存,或者做一些对eclipse有害的事情。 所以默认情况下,m2e eclipse插件会忽略任何maven插件,除非这些maven插件有一个特殊的m2e插件连接器,告诉m2e如何将maven插件集成到eclipse中。 总而言之,m2e正在捍卫eclipse的JVM进程,针对一个bug的maven插件,说每个maven插件都需要一个m2e连接器来连接maven和eclipse。

所以为了摆脱这个警告,我把以下内容添加到了父pom.xml的插件pipe理部分

 <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插件,它被devise用来保存元数据与eclipse m2e插件进行通信,当它处理maven pom.xml并且这个信息被用来告诉eclipse如何使用maven插件当eclipse在eclipse UI中运行pom.xml时,在pom.xml中定义。

从m2e 1.4及更高版本:您可以将所需的生命周期configuration集成到pom(parent-pom或project-pom)中,或者您可以将这些信息集成到eclipse中的全局m2econfiguration中。 你也有一些quickfix-行动来应用这个改变。

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

这里(执行者插件)我认为,在POM中的定义是最简单的方法。

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

对于那些在构build模型中configurationIDE时遇到问题的人来说,这只是一个参考。 请关注目前针对开普勒版本的增强请求:

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

对我来说这是类似的问题

我有maven 3.0.3和java 1.5

和我的朋友

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

有几个pluginExecutionFilters时存在另一个陷阱。 这些必须在pom.xml的正确位置! 对于我来说,发现没有任何错误或警告的stream离失所存在是很难的。

这是有几个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> ...