在编译器插件

时间:2016-05-18 12:50:24

标签: maven maven-plugin

我写了一个应该在编译阶段执行的插件。它生成一些其他Java类正在使用的源代码。

当我通常在我的POM中添加此插件时,我面临编译错误,因为Maven首先执行编译器插件然后执行我的插件。因此,在编译时,它会失败,因为它需要由我自己的插件生成的源代码。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

修复是在编译源代码之前调用插件。正如maven-compiler-plugin:compile所做的那样,编译默认发生在default lifecyclecompile阶段。

compile阶段之前,默认生命周期也会调用generate-sourceswhich purpose is来:

  

生成任何包含在编译中的源代码。

因此,您应该将插件绑定到阶段generate-sources而不是compile阶段。这可以使用MOJO的defaultPhase属性

来完成
@Mojo(name = "example", defaultPhase = LifecyclePhase.GENERATE_SOURCES)

或在执行中在POM中明确声明:

<execution>
    <phase>generate-sources</phase>
    <!-- id, goal and configuration -->
</execution>

您需要确保在该阶段生成的类正确添加到构建路径中。如果插件没有(通过调用MavenProject.addCompileSourceRoot(directory)),您可以使用build-helper-maven-plugin:add-source目标将生成源的目录添加到构建路径。