我目前正在寫某種Maven的POM預處理器,對於從多個輸入文件的項目組裝一個POM(基本模板和模塊特定的文件) 。這些文件按層次排序(模板=最常用,模塊特定=最不常用)。現在的問題是將這些文件合併成一個POM文件。與配置規則(背景:Maven的POM中,爪哇)合併XML文件
長話短說,或者如果你不熟悉使用Maven:一個POM看起來像這樣(縮短):
<project>
<modelVersion>4.0.0</modelVersion>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
</dependency>
</dependencies>
</project>
基本上合併,應當與值替換更加通用文件的值(即單身人士,例如上面的<modelVersion>
),但是存在某些元素,其中合併應該是加上對於父母來說更確定的元素(即集合,例如<dependency>
元素應該總是被添加到<dependencies>
元素,而不是<dependency>
元素s大廳被另一個替換)。
文件A:
<project>
<modelVersion>A</modelVersion>
<dependencies>
<dependency>
<groupId>groupIdA</groupId>
<artifactId>artifactIdA</artifactId>
</dependency>
</dependencies>
</project>
文件B:
<project>
<modelVersion>B</modelVersion>
<dependencies>
<dependency>
<groupId>groupIdB</groupId>
<artifactId>artifactIdB</artifactId>
</dependency>
</dependencies>
</project>
希望的輸出:
<project>
<modelVersion>B</modelVersion>
<dependencies>
<dependency>
<groupId>groupIdA</groupId>
<artifactId>artifactIdA</artifactId>
</dependency>
<dependency>
<groupId>groupIdB</groupId>
<artifactId>artifactIdB</artifactId>
</dependency>
</dependencies>
</project>
設定
與期望的輸出的定義更詳細的例子科爾ection類型元素是已知的,應該是可配置的(最好通過一組XPath表達式)。
基於Java的解決方案受到讚賞。
什麼看起來最有前途的,到目前爲止是工具提到here但合併時,這不是我所需要的MERGE
動作產生類似
<dependency>
<groupId>groupIdAgroupIdB</groupId>
<artifactId>artifactIdAartifactIdB</artifactId>
</dependency>
。
任何想法?謝謝你的幫助!
我沒有運行正常的Maven構建。相反,我正在運行一個預處理器,它只是構建POM(即它也構建了父POM,所以沒有任何東西可以繼承)。 這個背後的目的是預處理器是一個插件的一部分,該插件從各種模塊中動態地組裝項目,這些模塊遍佈在顛覆回購中。 – 2010-04-14 12:50:02