即使在自定义插件中使用显式绑定,m2e仍然会给出“生命周期配置未涵盖插件执行”的错误

时间:2012-01-10 04:14:25

标签: java eclipse maven maven-plugin m2e

我正在构建一个插件来进行代码生成。

我已按照此处的步骤来了解如何创建插件: http://maven.apache.org/guides/plugin/guide-java-plugin-development.html

插件来源:

/**
 * @goal helloworld
 * @phase generate-sources
 */
public class SampleMojo extends AbstractMojo
{
    @Override
    public void execute() throws MojoExecutionException, MojoFailureException
    {
        getLog().info("Hello, world.");
    }
}

用法:

    <plugins>
        <plugin>
            <groupId>com.sample</groupId>
            <artifactId>sample-maven-plugin</artifactId>
            <version>0.0.1</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>                     
                    <goals>
                        <goal>helloworld</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

该插件本身可以正常工作,但在Eclipse中,我一直得到“生命周期未涵盖”的错误。

我通过"How to solve “Plugin execution not covered by lifecycle configuration” for Spring Data Maven Builds"阅读并假设如果我创建了自己的插件并设置了@phase和@goal注释,那么它将摆脱该错误。我真的不想放入pom中的“lifecycleMappingMetadata”节点。

有人对此有任何建议吗?我需要为m2e编写一些特殊内容才能让错误消失吗?

2 个答案:

答案 0 :(得分:5)

ķ。 Claszen的答案是正确的,但我想填写一些额外的细节。

一种。为什么m2e会这样?

这种行为的目的是防止m2e通过增量(并且可能永无止境)的变化消耗太多资源。

B中。 m2e 1.1版本还不是'发布'

目前m2e 1.1仍然是一个“里程碑”。 用户需要使用此更新站点安装/升级到它:    http://download.eclipse.org/technology/m2e/milestones/1.1 (我还必须卸载'm2e SCM连接器'才能升级它)

现在,对于您的用户而言,这可能比在他们的pom.xml文件中插入“快速修复”代码段更麻烦。但是,从长远来看,使用它是件好事。

℃。制作maven插件m2e-1.1兼容的概述

如K. Claszen所述,大部分信息都在这里:M2E compatible maven plugins

一些关键点:

  1. 执行信息在文件中定义 - src / main / resources / META-INF / m2e / lifecycle-mapping-metadata.xml - 有关格式,请参阅M2E compatible maven plugins
  2. 如果您启用了'增量执行',您的Mojo将需要与Maven API正确通信:
    1. 指定对org.codehaus.plexus / plexus-build-api / 0.0.1的依赖关系(撰写时的当前内容)
    2. 使用org.codehaus.plexus.build.incremental.BuildContext,以:
    3. 检查相关资源是否已更改
    4. 通知Maven关于插件执行的相关写操作,以便它知道编译源等。
  3. d。替代

    如果1.1对您的用户来说不是一个现实的选择,您可以:

    1. 创建一个'M2E Extension Eclipse插件'(!!),又称'M2E Connector',并将其贡献给市场。祝你好运。
    2. 通知您的插件用户选择M2E“快速修复”,然后手动将<ignore />行更改为<execute />。还有其他SO问题/答案涵盖了这一点。

答案 1 :(得分:2)

我认为M2E compatible maven plugins网站会为您提供所需的信息。请注意,这首先适用于m2e版本1.1。