3

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

我已按照此处的步骤创建插件: 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 中,我不断收到“未被生命周期覆盖”错误。

我通读了“如何解决 Spring Data Maven Builds 的“生命周期配置未涵盖的插件执行””,并假设如果我创建自己的插件并设置 @phase 和 @goal 注释,它将摆脱该错误。我真的不想在 pom.xml 中放入“lifecycleMappingMetadata”节点。

有人对此有什么建议吗?我需要为 m2e 编写什么特别的东西才能消除该错误吗?

4

2 回答 2

5

K. Claszen 的回答是正确的,但我想补充一些额外的细节。

A. 为什么m2e会这样?

这种行为的目的是防止 m2e 通过增量(以及可能永无止境的)更改消耗过多的资源。

B. m2e 1.1 版还不是“发布”

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

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

C. 使您的 maven 插件与 m2e-1.1 兼容的概述

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

一些关键点:

  1. 执行信息在一个文件中定义 - src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml - 有关格式,请参阅M2E 兼容的 maven 插件
  2. 如果您启用了“增量执行”,您的 Mojo 将需要与 Maven API 正确通信:
    1. 指定对 org.codehaus.plexus/plexus-build-api/0.0.1 的依赖(在撰写本文时为当前)
    2. 使用 org.codehaus.plexus.build.incremental.BuildContext,来:
    3. 检查相关资源是否发生变化
    4. 通知Maven插件执行的相关写操作,使其知道编译源等。

D. 替代品

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

  1. 创建一个“ M2E Extension Eclipse 插件”(!!),也就是一个“ M2E 连接器”,并将其贡献给市场。祝你好运。
  2. 通知您的插件用户选择 M2E 'Quick Fix',然后手动将<ignore />行更改为<execute />. 还有其他 SO 问题/答案涵盖了这一点。
于 2012-01-19T01:47:49.343 回答
2

我认为M2E 兼容的 maven 插件站点将为您提供所需的信息。请注意,这首先从 m2e 版本 1.1 开始工作。

于 2012-01-10T10:25:29.673 回答