2012-01-27 44 views
2

我們使用Maven(3.0.3)作爲構建工具,我們需要針對不同環境(DEV,TEST,QA)有不同的版本。如果我們在構建時根據環境傳遞版本屬性值,則安裝的POM不具有傳遞的屬性值,而是仍具有$ {app-version}字符串。Maven變量不會被替換爲已安裝的pom文件

我看到已經有這個http://jira.codehaus.org/browse/MNG-2971

的錯誤是否有任何其他的選擇,因爲我們可以針對不同的環境,這將難以維持不不同的POM文件..

感謝 維傑

+0

我不認爲您真的應該使用Maven的安裝機制和存儲庫來爲各種臨時環境創建應用程序的部署工件。更好的做法是從源代碼管理標籤進行部署並在目標服務器上進行構建,或者使用程序集插件創建部署程序包(過濾配置文件以替換佔位符)並分發該程序包。 – millimoose 2012-01-27 22:42:20

+0

在每個部署目標上進行構建,儘管在雲環境中當前非常流行,但這種做法總是過度。 – 2012-02-01 20:58:18

回答

0

爲環境創建不同的工件並將該參數用作分類器。 pom對於所有三個工件都是相同的,但分類器將它們分開。

+0

如果我有SNAPSHOT版本的分類器,Maven是否在部署到遠程存儲庫時捕獲時間戳? – user684434 2012-02-03 21:32:31

+0

從我知道它應該爲所有文物。 – 2012-02-04 17:43:25

0

顯然Maven在安裝POM時不會進行任何變量/屬性替換。它按原樣安裝,這是原則。你最好不要從POM讀取任何屬性(除非這是例如版本號),你應該在外部文件中配置屬性(每個階段一個,例如dev.properties,test.properties,...),然後配置Maven配置文件(再次,每個階段一個),並調用Maven,如mvn -Pdev,具體取決於您想要構建的內容。在配置文件中,您可以使用您喜歡的任何屬性打包最終的應用程序(例如在build-helper-maven-plugin:add-resourcemaven-antrun-plugin +複製規則的幫助下)。

或者您可以filter your resources。例如,你可以過濾你的Spring上下文XML文件,它引用了屬性文件(所以你打包所有的屬性文件,但Spring只會引用一些特定的文件)。或者您可以過濾另一個屬性文件,您將從中瞭解什麼是要使用的「主」屬性文件(雙重間接)。