Mojo添加eclipse源文件夹

时间:2017-05-11 16:26:12

标签: java m2e maven-mojo

我编写了一个生成源代码的maven插件。 这基本上很好。

问题是,Eclipse无法识别我生成代码的目录作为附加源文件夹。因此我在XXX cannot be resolved to a type说了很多错误。但是,命令行中的maven编译和安装工作正常。

首先,我使用org.codehaus.mojo.build-helper-maven-plugin解决了这个问题。这很好用。但是,我不喜欢我的插件用户也需要添加第二个插件。因此,我查看了build-helper-maven-plugin中的source code of the add-source goal,并决定将相关代码直接添加到我的插件中。因此我的插件看起来像这样:

@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连接器?目前,我正在使用<{p}}使用

解决此m2e连接器问题
<action>
    <execute>
        <runOnConfiguration>true</runOnConfiguration>
        <runOnIncremental>true</runOnIncremental>
    </execute>
</action>

1 个答案:

答案 0 :(得分:1)

虽然您的插件为项目添加了额外的源目录,但Eclipse无法识别。您可以配置Eclipse应该执行您的目标,但是您不能告诉Eclipse添加额外的源目录。

某些插件(例如build-helper)可以添加额外的源目录,但是它们需要相应的m2e扩展名。没有一般m2e适用于所有插件。

您有以下选择:

  1. 使用build-helper-maven-plugin。我同意这是愚蠢的
  2. 编写自己的m2e扩展名。比选项1差很多。
  3. 将分离的maven模块用于插件生成的源。在此类模块中,您可以定义<sourceDirectory>${project.build.directory}/generate-sources</..>。分离是有道理的:生成的代码通常与常规代码不同。
  4. 不执行任何操作,并要求开发人员手动添加额外的源文件夹。这看起来非常原始,但有一个优点 - 手动添加的源文件夹不会被删除[右键单击 - &gt; Maven - &gt;更新项目]