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

Oh *_*oon 123 m2eclipse maven jboss7.x maven-ear-plugin

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

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

插件执行未包括生命周期配置:org.apache.maven.plugins:行家入耳式插件:2.6:生成应用程序的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>
Run Code Online (Sandbox Code Playgroud)

Jan*_*Jan 137

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

  • @Jan我不明白这个概念.M2E应该对用户透明.执行命令行Maven所做的事情,但是从eclipse中执行.pom配置数据中不应该告诉M2E该做什么.如果确实如此,那么这是一个糟糕的设计.顺便说一下,这些错误有时会在较新版本的Eclipse和M2E中消失. (70认同)
  • 在Eclipse中,有些目标没有意义.例如,我有将ZIP文件解压缩到`target`文件夹的项目.您不希望在保存每个源文件时"逐步"重新执行此操作.或者也许你**想要那样做.真的,m2e不知道你的具体构建.您可以在Eclipse,POM中存储m2e应该执行的操作,或者可以安装m2e连接器,以便为m2e添加更多知识来处理构建步骤.这些是您应该看到的选项.我知道你不想让你的POM m2e知道,但它是一个为你的所有开发人员集中配置这个的好地方. (12认同)
  • @RicardoGladwell你误解了downvotes的目的.箭头说"这个答案没有用" - 这个答案是不正确的.因此,即使你不喜欢这个答案所写的语气,也不需要downwote. (10认同)
  • 我同意rapt.我的POM不依赖于m2e,我现在想添加一个因为我碰巧使用Eclipse作为我的IDE.对于在同一个项目中工作的人来说,这可能正在使用另一个IDE,例如IntelliJ.如果m2e需要这些提示,那么它应该是Eclipse中m2e配置的一部分. (8认同)
  • 问题在于链接文档,就像Maven或Eclipse上的大多数文档一样.是abcacadabra.无论他们如何努力解释清楚,解释依赖于太多的概念,我作为一个相对新的Maven用户不理解,不知道如何查找 - 我发现的一切都有同样的问题:太多无法解释概念.该技术过于复杂或文档组织太差.无论如何,学习曲线很高.这里的答案增加了很多清晰度. (3认同)

jav*_*bie 43

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

  • 不算太晚.我这样解决了问题! (3认同)
  • 我也是.所有这些研究并试图了解问题是什么让我头疼,所以我忽略了它:)谢谢. (2认同)

cod*_*lus 29

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读取此配置中配置的project.Below片段指示M2E忽略jslintcompress对的YUICompressor - Maven的插件的目标

<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>
Run Code Online (Sandbox Code Playgroud)

3)如果您不希望使用此元数据污染您的pom文件,可以将其存储在外部XML文件中(选项3).下面是指示M2E忽略一个样本映射文件jslintcompress所述的YUICompressor-行家-插件的目标

<?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>
Run Code Online (Sandbox Code Playgroud)

4)如果你不喜欢这3个选项中的任何一个,你可以使用m2e连接器(扩展名)作为maven插件.连接器将为m2e提供元数据.您可以在此链接的连接器中查看元数据信息的示例.您可能已经注意到元数据引用了配置程序.这只是意味着m2e会将责任委托给扩展作者提供的特定java类.配置程序可以配置项目(比如说添加其他源文件夹等)并决定是否在增量构建期间执行实际的maven插件(如果在配置器中没有妥善管理,它可以导致无休止的项目构建)

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

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

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

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

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


小智 14

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

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


Cha*_*ith 12

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

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下*为什么*有效吗?"刚刚添加"和"为我解决"并没有真正增加我对它没有不必要的隐藏行为的信任. (11认同)