124

我正在使用带有 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>
4

10 回答 10

139

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

如果您在 Eclipse 中定义了插件执行pom(例如 的执行maven-ear-plugin:generate-application-xml),您还需要为 M2E 添加额外的配置信息,告诉 M2E 在 Eclipse 中运行构建时要做什么,例如插件执行是否应该被忽略或执行M2E,如果它也用于增量构建,...如果缺少该信息,M2E 会通过显示以下错误消息来抱怨它:

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

有关更详细的说明和一些需要添加到 pom 以使该错误消失的示例配置,请参见此处:

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

于 2012-02-04T16:58:46.597 回答
45

无论如何为时已晚,但我的解决方案很简单,右键单击 Eclipse 中的错误消息,然后选择 Quick Fix >> Ignore for each pom with such errors

于 2013-09-04T09:39:51.707 回答
33

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的jslint和目标compress

<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 的目标jslint和目标compress

<?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 插件(如果没有在配置器中正确管理,它可能导致无休止的项目构建)

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

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

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

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

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

于 2014-10-19T04:36:45.653 回答
15

提醒您可以更好地配置 m2e 的一个很好的解决方法是,将这些错误降级为警告:

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

于 2014-11-26T09:53:50.677 回答
12

我试图在清理后立即执行特定的堵塞,即清理后(默认为清理阶段)。这对我来说适用于日食靛蓝。刚刚添加 post-clean 为我解决了这个问题。

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 
于 2012-10-02T05:06:03.943 回答
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 才能看到错误消失。

于 2013-07-11T08:56:05.560 回答
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 扩展的支持。

于 2014-06-21T11:12:53.133 回答
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>
于 2013-04-29T09:15:31.243 回答
0

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

  • 从 eclipse 插件文件夹中选择 org.eclipse.m2e.lifecyclemapping.defaults jar
  • 提取它并打开生命周期映射元数据.xml,您可以在其中找到所有 pluginExecutions。
  • 添加插件的 pluginExecutions,这些插件<ignore/><action>标签下显示为错误。

<pluginExecutions>例如:对于 write-project-properties 错误,在生命周期映射元数据.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 插件文件夹中更新的 JAR
  • 重启 Eclipse

对于任何项目,您将来都应该看不到任何错误。

于 2013-11-13T10:00:41.973 回答
0

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

在eclipse中更新M2e插件

清理并重新构建

于 2015-07-28T08:52:22.673 回答