生命周期配置未涵盖插件执行(JBossas 7 EAR原型)


123

我正在使用带有Maven M2E插件1.0.100的Eclipse 3.7 Indigo。

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

生命周期配置未涵盖的插件执行:org.apache.maven.plugins:maven-ear-plugin:2.6:generate-application-xml(执行:default-generate-application-xml,阶段:generate-resources)

<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>

Answers:


138

这是前一段时间引入的M2E插件的“功能”。它与JBoss EAR插件没有直接关系,但在大多数其他Maven插件中也会发生。

如果您在其中定义了插件执行pom(如的执行maven-ear-plugin:generate-application-xml),则还需要为M2E添加其他配置信息,以告知M2E在Eclipse中运行构建时应执行的操作,例如,插件执行是否应被忽略或执行。 M2E,是否也应针对增量构建完成此操作,...如果缺少该信息,M2E将显示以下错误消息,以进行投诉:

“生命周期配置未涵盖插件执行”

请参阅此处以获取更详细的说明和一些示例配置,这些配置需要添加到pom才能使该错误消失:

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


70
@Jan我不明白这个概念。M2E对用户应该是透明的。执行命令行Maven所做的操作,但是要在Eclipse中进行。pom config数据中不应包含告诉M2E该怎么做的信息。如果是这样,那就是一个糟糕的设计。顺便说一句,这些错误有时在较新版本的Eclipse和M2E中消失了。
全神贯注

8
我同意。我的POM不依赖于m2e,我现在想添加一个只是因为我碰巧正在使用Eclipse作为我的IDE。对于其他可能正在使用其他IDE(例如IntelliJ)的同一个项目中的其他人来说,这是一笔麻烦。如果m2e需要这些提示,则它应该是Eclipse中m2e配置的一部分。
威廉

12
在Eclipse中,有些目标没有意义。例如,我有一些将ZIP文件解压缩到该target文件夹的项目。您不希望在保存每个源文件时对其进行“增量”重做。也许您确实想要那个。确实,m2e对您的特定版本一无所知。您可以存储m2e在Eclipse,POM中应该执行的操作,或者可以安装m2e连接器,以向m2e添加更多知识以处理构建步骤。这些是您应该看到的选项。我了解您不想让您的POM具备m2e意识,但这是一个为所有开发人员集中配置此功能的好地方。
Sander Verhagen

3
问题在于与此相关的链接文档,例如大多数有关Maven或Eclipse的文档。是abcacadabra。不管他们如何努力地清楚地解释它,解释都是基于太多的概念,我是一个相对较新的Maven用户,我不理解并且不知道如何查找-我发现的所有问题都存在相同的问题:太多无法解释概念。技术太复杂或文档组织太差。无论如何,学习曲线很高。此处的答案非常清楚。
reinierpost

10
@RicardoGladwell您误解了选票的目的。箭头说“这个答案没有用”-这是不正确的。因此,即使您不喜欢写此答案的语气,也无须使用低票。
达伍德·伊本·卡里姆

43

无论如何都为时已晚,但我的解决方案是简单地右键单击Eclipse中的错误消息,然后为每个出现此类错误的pom选择“快速修复>>忽略”


3
不算太晚。我就是这样解决问题的!
reinierpost 2014年

2
我也是。所有这些研究以及试图了解问题出了什么,让我头疼,所以我忽略了它:)谢谢。
dleerob 2014年

1
这对我有用。我怀疑它会自动生成@Jan的答案所描述的内容,该答案指向eclipse.org/m2e/documentation/m2e-execution-not-covered.html,因为接受快速修复后唯一看到的更改是对pom的更改。 xml。
Michael Osofsky 2014年

我在另一台机器上再次尝试,当我从JBehave 3.9.4升级到3.9.5时,问题消失了,因为它是JBehave插件,在我的情况下,这是造成错误的原因(我已经从JBehave Maven原型生成了插件配置(jbehave.org/reference/stable/archetypes.html))
迈克尔Osofsky

30

Eclipse有了增量构建的概念。这非常有用,因为它可以节省大量时间。

这有什么用

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

现在Maven插件有什么问题

大多数Maven插件不是为增量构建而设计的,因此会给m2e带来麻烦。m2e不知道插件目标是至关重要的还是无关紧要的。如果仅在更改单个文件时执行每个插件,则将花费大量时间。

这就是m2e依赖元数据信息来确定执行方式的原因。m2e提供了不同的选项来提供此元数据信息,并且优先顺序如下(从高到低)

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

1,2指的是在pom文件或其任何父项的标签中指定pluginManagement部分。M2E读取此配置以配置项目。下面的代码片段指示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)如果您不喜欢这3个选项中的任何一个,可以为maven插件使用m2e连接器(扩展名),该连接器将反过来提供元数据给m2e。您可以在此链接上看到连接器内元数据信息的示例。您可能已经注意到,元数据引用了配置程序。这只是意味着m2e将把责任委托给扩展作者提供的特定java类。配置器可以配置项目(例如添加其他源文件夹等)并决定是否在增量构建期间执行实际的maven插件(如果在配置器中管理不当,可能会导致无休止的项目构建)

请参阅这些链接以获取configuratior(link1link2)的示例。因此,如果该插件是可以通过外部连接器管理的插件,则可以安装它。m2e维护由其他开发人员提供的此类连接器的列表,这被称为发现目录。如果您没有通过任何选项(1-6)执行的任何生命周期映射元数据,并且发现目录具有一些可以管理执行的扩展,则m2e将提示您安装连接器。

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

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

6)默认情况下,m2e保留大多数常用插件(如maven-compiler-plugin以及许多其他插件)的生命周期映射元数据。

现在回到问题:您可能仅可以针对特定目标在1、2或3中提供忽略生命周期映射,这给您带来麻烦。


14

一个很好的解决方法是提醒您,在项目不继承错误肯定错误标记的情况下,可以更好地配置m2e,只是将这些错误降级为警告:

窗口->首选项-> Maven->错误/警告->生命周期配置未涵盖的插件执行=警告


12

我尝试在清理即清理后立即执行特定的插入操作(默认为清理阶段)。这对我来说与蚀靛蓝一起使用。只需添加清洁后即可为我解决问题。

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

11
您能解释一下为什么行得通吗?“只是添加”和“为我解决”并不能真正增加我对它没有不必要的隐藏行为的信任。
Kissaki 2014年

果然,我有一个phasegoal用于execution在给了我pom.xml中,我仍然得到错误。
reinierpost

男士-我很抱歉。我不是行家专家,想提供一些快速解决方案的帮助。我应该给更多的见解。我认为这里的窍门是包含执行阶段。由于mojo可以定义执行阶段,因此我尝试在清理(即清理后)后立即执行特定的插入操作(默认为清理阶段)。这对我来说与蚀靛蓝一起使用。可能特定的插件可能已经使用了来自主pom的某些依赖项?IIRC,这是基于Vaadin的插件。
Charith De Silva 2014年

2

通过应用以下解决方案,我能够使用Eclipse Kepler 4.3解决maven-antrun-plugin和jaxb2-maven-plugin的相同问题: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才能查看错误。


1

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

您可以按照以下说明排除未映射的生命周期目标:

https://wiki.eclipse.org/M2E_plugin_execution_not_covered

或者,只需右键单击Eclipse中的错误消息,然后选择Quick Fix->即可Ignore for every pom with such errors

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


0

借助Jan答案中解释的机制,我已指示m2e插入忽略目标“ generate-application-xml”。由于m2e创建了application.xml,因此可以消除该错误,并且似乎可以正常工作。

因此,基本上,该错误迫使我们决​​定当Maven构建在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>

0

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

  • 从eclipse插件文件夹中选择org.eclipse.m2e.lifecyclemapping.defaults jar
  • 将其解压缩并打开lifecycle-mapping-metadata.xml,您可以在其中找到所有pluginExecutions。
  • 添加插件的pluginExecution,显示为带有<ignore/>under <action>标记的错误。

例如:对于write-project-properties错误,请<pluginExecutions>在lifecycle-mapping-metadata.xml文件的部分下添加以下代码段:

 <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中替换该XML文件
  • 替换Eclipse的plugin文件夹中的更新的JAR
  • 重新启动Eclipse

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


0

即使问题太老了,但我还是想分享对我有用的解决方案,因为在检查此错误时,我已经检查了所有内容。这很痛苦,我花了两天时间进行尝试,最后的解决方案是:

在Eclipse中更新M2e插件

清理并重新构建

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.