2009-02-13 52 views
17

如果我有一個父pom,並且想要將它繼承到幾個項目。我通常通過在項目<parent> ... </parent>的頂部添加來做到這一點。我不喜歡這種方法是,如果在我的父項中發生了某些變化,我必須編輯該父項繼承的所有項目以修改版本號。有更好的方法嗎?我希望這是可以理解的,我試圖解釋。Maven2繼承

在此先感謝。

回答

2

我認爲,實現重要的是,在多模塊構建時,Maven 總是使用的是從你的本地倉庫版本。這也適用於多模塊構建!所以,當你引用「父」pom時,你會從本地maven倉庫獲取發佈的父項工件。所以當你做mvn安裝你重複發佈每個模塊到您當地的回購。

開發時,您自己的模塊可能被版本化爲X.X-SNAPSHOT之類的東西。對父類的引用是X.X-SNAPSHOT。在準備發佈之前不要更改這些內容。

所以一個簡單的例子是: 在首次發佈之前,所有模塊都被稱爲1.0-SNAPSHOT。 當初始版本爲「黃金版本」時,將所有1.0-SNAPSHOT模塊重命名爲1.0。 在1.1版本開始開發時,您將所有版本號更改爲1.1-SNAPSHOT。 依此類推...

該自定義是使用快照版本,直到您發佈爲止,此時您隨時更新版本號。在日常開發中,您不會更改版本號,因爲快照版本的處理方式與硬版本版本不同。

編輯: 經過一番思考,我認爲你的一些混亂的「註釋」部分源於這樣的:在你的POM中的版本號反映了整體應用程序版本。任何給定pom更改並不一定會更改應用程序版本號。如果您需要跟蹤pom中的更改,我建議您使用源代碼管理系統。因此,在3個月的時間內,您使用1.0版本,將版本號保持在1.0-SNAPSHOT是合理的。在(例如)3週期間,您使用1.1版本,版本號爲1.1-SNAPSHOT。

+0

如果我的父母有1.0版本快照。我在父母身上做了一些改變,增加了版本來讓我們說1.1-SNAPSHOT我不得不在每個孩子中增加它。我不明白你每次更新的意思。 – kukudas 2009-02-13 08:28:44

+0

我試過編輯;) – krosenvold 2009-02-13 09:24:44

6

自動父版本控制(即省略標籤)在Maven空間中是一個有爭議的問題。 There is a defect logged against it。目前,它正被視爲2.1版本分支的修復或改進,

8

您可以在發佈時使用Maven Release Plugin。它將自動更新所有版本號並在源代碼管理中創建一個標籤(如果您在POM中配置了SCM)。

我執行發佈的命令通常如下,之後我從SCM導出標籤並使用「mvn clean package」或「mvn clean deploy」構建它。

svn update (or whatever SCM you use) 
    mvn clean 
    mvn release:prepare -DautoVersionSubmodules=true 
    mvn release:clean 

因此,舉例來說,如果你的版本是第一個「1.0-SNAPSHOT」,然後釋放插件將創建一個標籤「項目名稱-1.0」,版本爲「1.0」,並最終提高當前版本爲「1.1〜快照」。該插件會詢問您的版本和標籤名稱,以便您可以覆蓋默認值。

3

你應該保留你的版本作爲快照,直到發佈。這樣你每次改變pom都不需要改變它。但是,一旦你釋放了一個父pom,你就會想要對所有的孩子進行更改(假設父母不在「reactor」構建中,否則它將被髮布插件撞在一起)。有一個相對較新的插件,稱爲ve​​rsions-maven-plugin,可以幫助更改版本。

16

我不喜歡這種做法 是什麼,如果事情在我 父母改變我不得不修改所有的項目 這是由父母遺傳給 修改版本號。有沒有 更好的方法?

是的!看一看在Maven Versions Plugin,具體是:

版本:所以 版本 當前項目的版本相匹配更新獨生子女模塊更新項目的 子模塊的父節。
例如,如果您 有一個聚合聚甲醛,這也是 爲它 聚集和孩子們和家長 版本不同步的項目父,這個魔力 可以幫助解決孩子 模塊的版本。
(注意,如果您的項目由於版本不匹配而無法構建 ,因此您的項目爲 ),則您可能需要調用 Maven以-N選項爲 運行此目標。


編輯:當然,使用Maven3你現在可以有<版>稀少<父>子元素模塊:

開發商在多模塊或多工作pom項目不必在Maven 3的每個子模塊中指定父版本。相反,您可以添加無版本的父元素。

Ref