2011-08-04 43 views
1

我的Maven項目是多模塊的,通常版本號不會同步。例如,我可以擁有一個版本爲1.2.3-SNAPSHOT的主POM和一個版本爲3.4.5-SNAPSHOT的子模塊(不保持同步的主要原因是模塊通常從一個項目移動到另一個,必須保持其版本)。Maven:從子模塊中檢索主模塊版本

現在我想把主項目版本放在包含main(或webapp等)的模塊的資源中,當然這是一個子模塊。這意味着我需要從一個子模塊訪問主POM版本。

另外請注意,我的項目有3或4個級別;因此,主POM是子模塊的祖父,而不僅僅是父母。

儘管有一些Maven的經驗,包括先進的東西,迄今爲止,我一直無法解決這個問題。

謝謝。

+0

太明顯的答案是讓大師級POM將大師級版本放在由子子模塊讀取的屬性中。我錯過了什麼? –

+0

...子模塊從大師級繼承的事實。它們繼承了屬性的定義而不是值,因此它們用本身的版本在本地重新評估$ {project.version}。 –

+0

啊,也許這是有效的。我試圖建議的是定義一個屬性,稱爲「grand-master.version」,其中的_literal_版本_redundantly_在特級大師中。沒有本地碰撞。 –

回答

4

它應該與${project.parent.version}一起使用。

+2

你的直接建議不適合我,因爲我有三個和四個級別的兒童POM。但是你讓我重新閱讀手冊,實際上'$ {project.parent}'指的是包含父項的整個包的屬性。換句話說,'$ {project.parent.parent.version}'適用於三個級別。我更喜歡獨立於層數的東西,但這種方法現在是好的。可能使用Groovy Maven插件或類似的插件,可以編寫一個小腳本,通過Maven屬性導航到根模塊。 –