我寫了一個應該在編譯階段執行的插件。它生成一些其他Java類正在使用的源代碼。在編譯插件之前調用自定義Maven插件
當我通常將這個插件添加到我的POM中時,我遇到了一個編譯錯誤,因爲Maven首先執行編譯器插件,然後執行我的插件。所以在編譯時,它會失敗,因爲它需要由我自己的插件生成的源代碼。
如何解決此問題?
我寫了一個應該在編譯階段執行的插件。它生成一些其他Java類正在使用的源代碼。在編譯插件之前調用自定義Maven插件
當我通常將這個插件添加到我的POM中時,我遇到了一個編譯錯誤,因爲Maven首先執行編譯器插件,然後執行我的插件。所以在編譯時,它會失敗,因爲它需要由我自己的插件生成的源代碼。
如何解決此問題?
解決的辦法是在彙編源代碼之前調用您的插件。如maven-compiler-plugin:compile
所做的編譯,默認情況下發生在default lifecycle的compile
階段。
是compile
階段之前,默認的生命週期也調用generate-sources
,which 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
目標將已生成源的目錄添加到構建路徑。