簡體   English   中英

在編譯階段后通過Maven插件生成新的源代碼

[英]Generating new sources via Maven plugin after compile phase

我有一個Maven項目,我需要在其中執行兩個代碼生成步驟。 一個生成一些Java類型,然后第二個依賴於那些Java類型來生成更多代碼。 有沒有辦法在我的構建過程中發生這兩個步驟?

目前我的步驟是:

  1. 執行第一個代碼生成插件(在generate-sources期間)
  2. 添加生成類型的目錄以構建路徑
  3. 執行第二代碼生成插件(在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM