Mojo添加Eclipse源文件夹

4

我写了一个生成源代码的maven插件,基本上运行得很好。

问题是,Eclipse无法识别我生成代码的目录作为附加源文件夹。因此,我会收到大量错误信息,显示XXX不能解析为类型。但是,从命令行运行 maven 编译和安装没有问题。

起初,我通过使用org.codehaus.mojo.build-helper-maven-plugin来解决这个问题。这个方法很好用。然而,我不喜欢我的插件用户需要添加第二个插件。因此,我查看了build-helper-maven-pluginadd-source目标的源代码并决定直接将相关代码加入到我的插件中。因此,我的插件看起来像这样:

@Mojo(name = "generate-sources", defaultPhase = LifecyclePhase.GENERATE_SOURCES)
public class MyMojo extends AbstractMojo {
    @Parameter(defaultValue = "${project}", readonly = true, required = true)
    private MavenProject project;

    @Parameter(required = true)
    private File targetDirectory;

    // some more members

    @Override
    public void execute() throws MojoExecutionException {
        // generation of the sources into targetDirectory

        project.addCompileSourceRoot(targetDirectory.getAbsolutePath());
    }
}

执行过程中没有错误,无论是从命令行还是从eclipse(使用Alt+F5或右键单击-> Maven->更新项目)。 但是,附加的源目录未被识别。
我做错了什么吗?还是我需要特殊的m2e连接器?目前,我正在使用“生命周期映射插件”绕过此m2e连接器。您可以在此处找到更多信息。
<action>
    <execute>
        <runOnConfiguration>true</runOnConfiguration>
        <runOnIncremental>true</runOnIncremental>
    </execute>
</action>
1个回答

1
尽管您的插件将额外的源目录添加到项目中,但Eclipse无法识别。您可以配置Eclipse执行您的目标,但无法告诉Eclipse添加额外的源目录。
一些插件(例如build-helper)可以添加额外的源目录,但它们需要相应的m2e扩展程序。没有适用于所有插件的通用m2e。
您有以下选项:
1.使用build-helper-maven-plugin。我同意这很愚蠢。 2.编写自己的m2e扩展程序。比选项1更糟糕。 3.使用单独的maven模块来生成您的插件源代码。在这种模块中,您可以定义${project.build.directory}/generate-sources<..>。分离是有意义的:生成的代码通常具有不同的性质。 4.什么也不做,并要求开发人员手动添加额外的源文件夹。这看起来非常原始,但有一个优点-手动添加的源文件夹不会在[右键单击-> Maven->更新项目]时被删除。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接