2016-05-18 57 views
2

我寫了一個應該在編譯階段執行的插件。它生成一些其他Java類正在使用的源代碼。在編譯插件之前調用自定義Maven插件

當我通常將這個插件添加到我的POM中時,我遇到了一個編譯錯誤,因爲Maven首先執行編譯器插件,然後執行我的插件。所以在編譯時,它會失敗,因爲它需要由我自己的插件生成的源代碼。

如何解決此問題?

回答

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目標將已生成源的目錄添加到構建路徑。