2011-12-11 106 views
1

在我們的項目中,我們有大約25個Maven項目,每個項目至少包含3個模塊項目和一個父POM。總共是(25 * 4)100個POM文件。有沒有簡單的方法來維護POM更改版本?所以這個任務變成單調乏味的任務。這在整個軟件開發過程中一定是常見的問題?Maven多個Maven項目的POM版本管理

有沒有人有腳本或工具來做這個版本更改來處理以下3種情況?

1) 
    <dependency> 
     <groupId>THEGROUPID</groupId> 
     <artifactId>THEARTIFACT</artifactId> 
     <version>THE-VERSION</version> 
    </dependency> 

2) 
    <dependency> 
     <groupId>THEGROUPID</groupId> 
     <artifactId>THEARTIFACT</artifactId> 
     <version>$(version.number)</version> 
    </dependency> 
3) 
    <parent> 
    <groupId>THEGROUPID</groupId> 
    <artifactId>THEARTIFACT</artifactId> 
    <version>THE-VERSION</version> 
    </parent> 

我們有25個Maven項目,每一個對彼此(通過父POM而不是循環依賴)的依賴,它們之間。所以,當我們改變其中一個lib的版本時,它需要在整個Maven模塊父POM中進行更改.....因此,我一直在尋找可以在POM的不同版本中實現這個功能的工具,而不僅僅是一個muti -module項目(發佈插件將只發布和一個maven多模塊項目。)我希望這將有更好的理解這個問題..

基本上,我正在尋找Linux SED類型的命令,但對於特定groupid和artifactid。

感謝,

Bmis13

回答

4

放入<dependencyManagement>所有版本在你的父POM:

<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>THEGROUPID</groupId> 
     <artifactId>THEARTIFACT</artifactId> 
     <version>THE-VERSION</version> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

在此,你不需要到<version>標記添加到您的孩子勁歌。

編號:dependencyManagement(向下滾動)

+0

大家好, 謝謝, – Bmis13

0

我寫我自己的工具來做到這一點。這就是所謂的「鞍馬」,你可以在這裏:

http://code.google.com/p/pommel/

您定義的映射文件和命令行運行它即

java -jar pommel-1.0.0.jar -iC:\Development\java\projects -mmapping.xml 

映射文件的形式爲:

<?xml version="1.0"?> 
<mappings> 
    <mapping> 
    <dependency-source> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>*</version> 
    </dependency-source> 
    <dependency-target> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.9</version> 
     <scope>test</scope> 
    </dependency-target> 
    </mapping> 

</mappings> 

這將用指定的依賴目標替換對junit的所有引用。不是您可以在依賴性源定義中使用通配符。它會將映射應用到它在指定目錄下找到的所有pom文件。

1

使用versions-maven-pluginset魔力:

cd <your-super-parent-pom> 
mvn versions:set -DoldVersion=1-SNAPSHOT -DnewVersion=2-SNAPSHOT 

這個插件但是有一定的侷限性。它不能處理pom繼承複雜的某些(複雜)結構,我也不確定它是否處理屬性引用。

maven-release-plugin內部也有類似的功能。它可能會有更高的工作機會,因爲它更經常使用 - 而且AFAIK代碼不會共享 - 但我對此沒有直接的經驗。我剛剛觀察到很多版本在相當困難的情況下使用正確的版本重新編號...