我写了一个生成源代码的Maven插件。这基本正常。
问题是,Eclipse无法将我生成代码的目录识别为其他源文件夹。因此,我有很多错误的说法XXX cannot be resolved to a type
。不过,通过命令行进行maven编译和安装可以正常工作。
首先,我通过使用解决了此问题org.codehaus.mojo.build-helper-maven-plugin
。这很好。但是,我不喜欢插件的用户也需要添加第二个插件。因此,我当时一看到的源代码,add-source
目标在build-helper-maven-plugin
并决定将相关代码要做到这一点直接添加到我的插件。因此,我的插件如下所示:
@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>
尽管您的插件向项目添加了额外的源目录,但是Eclipse无法识别该目录。您可以配置Eclipse应该执行您的目标,但是您不能告诉Eclipse添加额外的源目录。
例如build-helper
,某些插件可以添加额外的源目录,但是它们需要相应的m2e扩展名。没有适用于所有插件的通用m2e。
您有以下选择:
build-helper-maven-plugin
。我同意这是愚蠢的<sourceDirectory>${project.build.directory}/generate-sources</..>
。这种分离是有意义的:生成的代码通常具有与常规代码不同的性质。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句