首页 文章

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

提问于
浏览
123

我正在使用Eclipse 3.7 Indigo和Maven M2E Plugin 1.0.100 .

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

生命周期配置未涵盖的插件执行:org.apache.maven.plugins:maven-ear-plugin:2.6:generate-application-xml(执行:default-generate-application-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>

10 回答

  • 28

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

    update the M2e plugin in eclipse

    清理并再次建造

  • 14

    这是前一段时间推出的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

  • 0

    无论如何,为时已晚,但我的解决方案很简单,右键单击Eclipse中的错误消息,并选择快速修复>>忽略每个pom都有这样的错误

  • 135

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

    How is this Useful

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

    Now what's the problem with Maven Plugins

    大多数maven插件不是为增量构建而设计的,因此会给m2e带来麻烦 . m2e不知道插件目标是否是至关重要的或者是否无关紧要 . 如果它只是在单个文件发生变化时执行每个插件,那么它将花费大量时间 .

    这就是为什么m2e依赖元数据信息来确定如何处理执行的原因 . m2e提供了不同的选项来提供这种元数据信息,优先顺序如下(从最高到最低)

    • 项目的pom.xml文件

    • 父,祖父等pom.xml文件

    • [m2e 1.2]工作区首选项

    • 安装了m2e扩展

    • [m2e 1.1] maven插件提供的生命周期映射元数据
      m2e附带的

    • 默认生命周期映射元数据

    1,2指的是在你的pom文件的标签或其任何父母的标签中指定pluginManagement部分 . M2E读取此配置以配置项目.Below片段指示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个选项中的任何一个,你可以使用m2e连接器(扩展名)作为maven插件 . 连接器将为m2e提供元数据 . 您可以在link处看到连接器中元数据信息的示例 . 您可能已经注意到元数据引用了配置程序 . 这只是意味着m2e会将责任委托给扩展作者提供的特定java类 . 配置程序可以配置项目(比如说添加其他源文件夹等)并决定是否在增量构建期间执行实际的maven插件(如果在配置器中没有妥善管理,它可以导致无休止的项目构建)

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

    下图显示了m2e如何提示您为build-helper-maven-plugin安装连接器 .
    install connector suggested from the discovery catalog
    .

    5)m2e鼓励插件作者支持maven-plugin本身内的增量构建和供应生命周期映射 . 这意味着用户不必使用任何额外的生命周期映射或连接器 . 一些插件作者有already implemented this

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

    现在回到问题:您可能只是为1,2或3提供忽略生命周期映射,以便为您创建麻烦 .

  • 43

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

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

  • 0

    我试图在清理后立即执行特定的插件,即后清理(默认为清洁阶段) . 这对我来说是eclipse indigo . 刚添加后清理解决了我的问题 .

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

    通过应用此解决方案,我能够通过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扩展的支持 .

  • 2

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

    所以基本上错误迫使我们决定在m2e插件的控制下,当Maven构建在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>
    
  • 12

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

    • 从eclipse插件文件夹中选择org.eclipse.m2e.lifecyclemapping.defaults jar

    • 解压缩并打开lifecycle-mapping-metadata.xml,您可以在其中找到所有pluginExecutions .

    • 添加插件的pluginExecutions,它们在 <action> 标签下显示为 <ignore/> 错误 .

    例如:对于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中的XML文件

    • 在Eclipse的插件文件夹中替换更新的JAR

    • 重启Eclipse

    您应该看到将来任何项目都没有错误 .

相关问题