[英]Generating new sources via Maven plugin after compile phase
我有一個Maven項目,我需要在其中執行兩個代碼生成步驟。 一個生成一些Java類型,然后第二個依賴於那些Java類型來生成更多代碼。 有沒有辦法在我的構建過程中發生這兩個步驟?
目前我的步驟是:
generate-sources
期間) compile
期間) 但是我的問題是第二代碼生成插件生成的任何內容都不會被編譯(因為編譯階段已經完成)。 如果我將第二個代碼生成插件附加到早期階段,則會失敗,因為它需要第一個代碼生成插件中的類出現在類路徑中。
我知道我可以把它分成兩個模塊,一個依賴於另一個 ,但我想知道這是否可以在一個pom中實現。 看起來需要一種在正常編譯階段完成后再次調用編譯的方法。
有任何想法嗎?
您始終可以配置兩個編譯器插件的執行,兩者都與編譯階段相關聯。 在其中一個你包括額外的東西:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<executions>
<execution>
<id>one</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration></configuration>
</execution>
<execution>
<id>two</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<compilerArgument>-verbose -bootclasspath ${java.home}\lib\rt.jar</compilerArgument>
</configuration>
</execution>
</executions>
<plugin>
您也可以嘗試<includes><include>path/</include></includes>
根據官方文件 :
當給定與特定階段匹配的多個執行時,它們將按照POM中指定的順序執行,並且首先運行繼承的執行。
但我完全沒有得到你想要的東西。 http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html
顯而易見的解決方案(在編譯階段后生成代碼)不起作用,因為Maven不允許對階段進行重新排序。
正確的解決方案是使用模塊 。 您需要兩個:第一個模塊包含代碼生成器。 在第二個模塊中,您可以使用第一個模塊中的生成器在generate-sources
階段生成一些內容。
這種方法的最大優點是:你永遠不會陷入某種循環(比如“A”需要生成需要“A”的代碼)。 因此,您的構建將更加簡單,您將花費更少的時間來尋找奇怪的錯誤。
[更新]在我的項目中,我從測試中運行代碼生成器。 如果沒有特殊選項,文件將生成到臨時文件夾中並與源進行比較。 這讓我可以看到我生成的代碼( 我置於版本控制下 )的意外更改。
設置系統屬性后,將覆蓋源文件,並且可以將更改提交給我的VCS。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.