我编写了一个生成源代码的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>
答案 0 :(得分:1)
虽然您的插件为项目添加了额外的源目录,但Eclipse无法识别。您可以配置Eclipse应该执行您的目标,但是您不能告诉Eclipse添加额外的源目录。
某些插件(例如build-helper
)可以添加额外的源目录,但是它们需要相应的m2e扩展名。没有一般m2e适用于所有插件。
您有以下选择:
build-helper-maven-plugin
。我同意这是愚蠢的<sourceDirectory>${project.build.directory}/generate-sources</..>
。分离是有道理的:生成的代码通常与常规代码不同。