构建maven项目时出现maven-plugin错误

时间:2015-05-06 00:11:17

标签: java eclipse maven m2e

当我在日食中导入我的maven项目时,我收到了这个错误:

  

生命周期配置未涵盖插件执行:   org.codehaus.mojo:buildnumber - Maven的插件:1.0:创建时间戳   (执行:generate-build-number,阶段:   generate-sources)pom.xml / DataClient第6行Maven项目

有谁知道如何解决这个问题?我尝试了其他几种在SO问题中列出的方法,但它没有用。

我正在使用eclipse kepler,而且我的pom.xml文件中也有pluginManagement

我在使用插件的pom.xml片段:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <argLine>-javaagent:"${settings.localRepository}"/com/googlecode/jmockit/jmockit/1.7/jmockit-1.7.jar</argLine>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <configuration>
                    <instrumentation>
                        <excludes>
                            <exclude>**/test/**/*.class</exclude>
                        </excludes>
                    </instrumentation>
                    <formats>
                        <format>xml</format>
                        <format>html</format>
                    </formats>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.9.1</version>
                <configuration>
                    <author>false</author>
                    <keywords>true</keywords>
                    <show>public</show>
                    <links>
                        <link>http://docs.guava-libraries.googlecode.com/git-history/v16.0/javadoc/</link>
                        <link>http://netty.io/4.0/api/</link>
                    </links>
                    <doctitle>Data Client API (${project.version})</doctitle>
                    <windowtitle>Data Client API (${project.version})</windowtitle>
                    <groups>
                        <group>
                            <title>Core API</title>
                            <packages>com.host.grads.client:com.host.grads.client.resources</packages>
                        </group>
                        <group>
                            <title>Miscellaneous</title>
                            <packages>com.host.grads.client.utils</packages>
                        </group>
                    </groups>
                </configuration>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

1 个答案:

答案 0 :(得分:0)

我在SO上发现了这一点,我认为这是你问题的答案:Plugin execution not covered by lifecycle configuration (JBossas 7 EAR archetype)

我复制Jan最初写的文字:

  

这是一个&#34;功能&#34;之前介绍过的M2E插件。它与JBoss EAR插件没有直接关系,但也适用于大多数其他Maven插件。

     

如果你的pom中定义了一个插件执行(比如执行maven-ear-plugin:generate-application-xml),你还需要为M2E添加额外的配置信息,告诉M2E构建时该怎么做在Eclipse中运行,例如如果插件执行被M2E忽略或执行,是否也应该为增量构建执行,...如果缺少该信息,M2E通过显示生命周期配置未涵盖的&#34;插件执行来抱怨它#34;错误信息。

     

请点击此处查看更详细的说明以及需要添加到pom的一些示例配置,以避免错误消失:

     

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

如果您需要实施此解决方案,可以查看前面提到的问题的评论:https://stackoverflow.com/a/26447353/4810148

以下是coderplus回答的内容的副本。当然,您必须使用您的案例所关注的插件替换groupId和artifactId。

  

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

     

这是多么有用

     

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

     

现在Maven插件的问题是什么

     

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

     

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

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

    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)如果您不喜欢这三个选项中的任何一个,您可以使用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本身内支持增量构建和提供生命周期映射。这意味着用户不必使用任何其他生命周期映射或连接器。一些插件作者{ {3}}

         

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

         

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