生命周期configuration不包含的插件执行(JBossas 7 EAR原型)

我使用Eclipse 3.7 Indigo和Maven M2E Plugin 1.0.100。

使用JBoss 7.x JavaEE 6 EAR原型,EAR的pom给了我这个错误:

插件执行不包含在生命周期configuration中:org.apache.maven.plugins:maven-ear-plugin:2.6:generate-application-xml(执行:默认生成应用程序xml,阶段:生成资源)

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ear-plugin</artifactId> <version>2.6</version> <configuration> <!-- Tell Maven we are using Java EE 6 --> <version>6</version> <!-- Use Java EE ear libraries as needed. Java EE ear libraries are in easy way to package any libraries needed in the ear, and automatically have any modules (EJB-JARs and WARs) use them --> <defaultLibBundleDir>lib</defaultLibBundleDir> <modules></modules> </configuration> <plugin> 

这是刚才介绍的M2E插件的一个“特色”。 它与JBoss EAR插件没有直接关系,但也与大多数其他Maven插件一样。

如果你在你的pom定义了一个插件执行(例如执行maven-ear-plugin:generate-application-xml ),你还需要为M2E添加额外的configuration信息,告诉M2E在构build运行时该怎么做Eclipse,例如插件的执行应该被M2E忽略或者执行,也应该用于增量构build……如果缺less这些信息,M2E会通过显示这个错误信息来抱怨:

“生命周期configuration不包含的插件执行”

看到这里的更详细的解释和一些示例configuration,需要添加到POM,使错误消失:

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

无论如何它已经太晚了,但我的解决scheme是简单的右键单击Eclipse中的错误消息,并select快速修复>>忽略每个POM这样的错误

Eclipse已经有了增量构build的概念,这是非常有用的,因为它节省了大量的时间。

这是如何有用的

假设您只是更改了一个.java文件。 增量构build器将能够编译代码,而无需重新编译所有内容(这将花费更多的时间)。

现在Maven插件有什么问题

大多数的Maven插件不是为增量构build而devise的,因此它为m2e带来麻烦。 m2e不知道插件的目标是否是至关重要的,或者是不相关的。 如果只是在单个文件发生变化时执行每个插件,则需要花费很多时间。

这就是为什么m2e依靠元数据信息来判断应该如何处理这个执行的原因。 m2e提供了不同的选项来提供这个元数据信息,优先顺序如下(从最高到最低)

  1. 项目的pom.xml文件
  2. 父,祖父等等pom.xml文件
  3. [m2e 1.2+]工作区偏好设置
  4. 安装m2e扩展
  5. 由maven插件提供的[m2e 1.1+]生命周期映射元数据
  6. m2e附带的默认生命周期映射元数据

1,2指的是在你的pom文件的标签或其任何父母的指定pluginManagement部分。 M2E读取此configuration以configuration项目。下面的代码片段指示m2e忽略yuicompressor-maven-plugin的jslintcompress目标

 <pluginManagement> <plugins> <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself. --> <plugin> <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version> <configuration> <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> <groupId>net.alchim31.maven</groupId> <artifactId>yuicompressor-maven-plugin</artifactId> <versionRange>[1.0,)</versionRange> <goals> <goal>compress</goal> <goal>jslint</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin> </plugins> </pluginManagement> 

3)如果你不喜欢用这个元数据来污染你的pom文件,你可以把它存储在一个外部XML文件中(选项3)。 下面是一个示例映射文件,指示m2e忽略yuicompressor-maven-plugin的jslintcompress目标

 <?xml version="1.0" encoding="UTF-8"?> <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> <groupId>net.alchim31.maven</groupId> <artifactId>yuicompressor-maven-plugin</artifactId> <versionRange>[1.0,)</versionRange> <goals> <goal>compress</goal> <goal>jslint</goal> </goals> </pluginExecutionFilter> <action> <ignore/> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> 

4)如果你不喜欢这三个选项中的任何一个,你可以使用mae插件的m2e连接器(扩展名)。连接器将提供元数据到m2e。 您可以在此链接的连接器中查看元数据信息的示例。 您可能已经注意到元数据是指configuration器。 这只是意味着m2e将责任委托给由扩展作者提供的特定Java类。configurator可以configuration项目(如添加额外的源文件夹等),并决定是否在增量构build期间执行实际的maven插件(如果没有在configuration器中正确pipe理,可能导致无休止的项目构build)

请参阅这些链接了解configuration器( link1 , link2 )的示例。 所以如果插件是可以通过外部连接器pipe理的东西,那么你可以安装它。 m2e维护着由其他开发者贡献的这种连接器的列表。这被称为发现目录。 如果您还没有任何生命周期映射元数据执行任何选项(1-6),并且发现目录有一些可以pipe理执行的扩展,m2e将提示您安装连接器。

下图显示了m2e如何提示您为build-helper-maven-plugin安装连接器。 安装发现目录中建议的连接器

5)m2e鼓励插件作者在Maven插件本身中支持增量构build和提供生命周期映射。这将意味着用户将不必使用任何额外的生命周期映射或连接器。一些插件作者已经实现了这个

6)默认情况下,m2e拥有大部分常用插件(如maven-compiler-plugin等)的生命周期映射元数据。

现在回到这个问题:你可能只是提供一个1,2或3的忽略的生命周期映射,为那个正在为你制造麻烦的特定目标。

一个很好的解决方法提醒你,m2e可以被更好地configuration,而不需要项目inheritance误报错误标记,只是将这些错误降级为警告:

窗口 – >首选项 – > Maven – >错误/警告 – >生命周期configuration不包含的插件执行=警告

我试图执行特定的堵塞清理后,即后清理(默认是清洁阶段)。 这对日食靛蓝工作。 刚添加后清理解决了我的问题。

 <executions> <execution> <configuration> </configuration> <phase>post-clean</phase> <goals> <goal>update-widgetset</goal> </goals> </execution> </executions> 

我可以用Eclipse Kepler 4.3中的maven-antrun-plugin和jaxb2-maven-plugin解决同样的问题,通过应用这个解决scheme: http ://wiki.eclipse.org/M2E_plugin_execution_not_covered#Eclipse_4.2_add_default_mapping
因此,我的%elipse_workspace_name%/。metadata / .plugins / org.eclipse.m2e.core / lifecycle-mapping-metadata.xml的内容如下所示:

 <?xml version="1.0" encoding="UTF-8"?> <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <versionRange>1.3</versionRange> <goals> <goal>run</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> <pluginExecution> <pluginExecutionFilter> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxb2-maven-plugin</artifactId> <versionRange>1.2</versionRange> <goals> <goal>xjc</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> 

*必须重新启动Eclipse才能看到错误消失。

从Maven Eclipse (m2e)版本0.12开始,所有Maven生命周期目标必须映射到已安装的m2e扩展。 在这种情况下, maven-ear-plugin有一个未映射的目标default-generate-application-xml

只需按照以下说明操作即可排除未映射的生命周期目标:

https://wiki.eclipse.org/M2E_plugin_execution_not_covered

或者,只需右键单击Eclipse中的错误消息,然后selectQuick Fix – > Ignore for every pom with such errors

在忽略生命周期目标时,您应该小心:通常目标会做一些有用的工作,如果您在Eclipse中将其configuration为被忽略,则可能会错过重要的构build步骤。 您可能还想考虑为未映射的生命周期目标添加对Maven Eclipse EAR扩展的支持。

通过在Jan的答案中解释的机制,我已经指示m2e pluging忽略“generate-application-xml”的目标。 这摆脱了错误,似乎工作,因为m2e创buildapplication.xml。

所以基本上这个错误迫使我们决​​定在Maven构build在m2e插件的控制下在Eclipse内运行时,由哪个机制负责生成application.xml。 我们已经决定m2e负责。

 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ear-plugin</artifactId> <version>2.6</version> <configuration> <version>6</version> <defaultLibBundleDir>lib</defaultLibBundleDir> </configuration> </plugin> </plugins> <pluginManagement> <plugins> **<!-- This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself. --> <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-ear-plugin</artifactId> <versionRange>[2.1,)</versionRange> <goals> <goal>generate-application-xml</goal> </goals> </pluginExecutionFilter> <action> <ignore></ignore> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin>** </plugins> </pluginManagement> </build> 

您需要了解M2E_plugin_execution_not_covered中的内容,然后按照以下步骤操作:

  • 从eclipse插件文件夹中selectorg.eclipse.m2e.lifecyclemapping.defaults jar
  • 解压缩并打开lifecycle-mapping-metadata.xml,您可以在其中find所有的插件执行。
  • <action>标签下的<action> <ignore/>添加插件的pluginExecutions,这些插件显示为错误。

例如:对于write-project-properties错误,将此片段添加到lifecycle-mapping-metadata.xml文件的<pluginExecutions>部分下:

  <pluginExecution> <pluginExecutionFilter> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <versionRange>1.0-alpha-2</versionRange> <goals> <goal>write-project-properties</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> 
  • 在JAR中replace该XML文件
  • replaceEclipse插件文件夹中的更新JAR
  • 重新启动Eclipse

任何项目在将来都不会出现任何错误。

即使这个问题太老了,但我想分享一下对我有用的解决scheme,因为我已经检查了一切,当涉及到这个错误。 这是一个痛苦,我花了两天尝试,最后的解决办法是:

更新eclipse中的M2e插件

清理并重新构build