2012-04-30 56 views
16

今天我觀察到在settings.xml中定義的maven proprties覆蓋了pom.xml中的那個。在pom.xml和settings.xml中覆蓋Maven屬性的順序是什麼?

因爲這只是一個觀察,我不確定這是否完全正確。因此,我查找了參考文獻或某篇文章,但沒有發現有關覆蓋settings.xmlpom.xml中使用相同名稱定義屬性的行爲的具體說明。

也許有人可以提供一個鏈接到參考部分(我可能忽略)或可靠的文章/博客?

+0

你有一個相同的ID或ID不同的個人資料? – khmarbaise

+0

POM中的屬性沒有任何配置文件; settings.xml中的屬性位於配置文件中,其id不會在其他位置使用。 – Ralph

+0

但是,如果您的屬性在pom以及settings.xml中具有相同的名稱,那麼它們將被來自settings.xml文件的值覆蓋。否則,將無法通過配置文件覆蓋屬性。 – khmarbaise

回答

16

基於在我看來documentation很清楚哪一個具有優先於其他(與文檔的節選):

如果配置文件是活動的設置,它的值將覆蓋任何 等效ID 'd配置文件在POM或profiles.xml文件中。

profiles.xml在Maven 3中不存在,只在Maven 2.2.1中支持,但不應該使用。

1

剛剛在我的maven 3.3.9上測試過它。

首先,屬性始終在配置文件中定義,如果我們談論的settings.xml。從全局設置XML 屬性具有最高優先級,將覆蓋用戶settings.xml和特定pom.xml除非有型材之間的名稱衝突。

如果是這樣的話,那就是在全局,用戶設置以及pom.xml中有一個配置文件,其ID爲,user/local settings.xml是老闆。 即使pom.xml屬性不配置文件,用戶/本地settings.xml財產坐在裏面從具有相同名稱會戰勝它的情景模式。 順便提一下,全局settings.xml也會在沒有配置文件的情況下擊敗pom.xml屬性。

作爲一個方面說明:<repositories><mirrors>邏輯略有不同:

  • 用戶/本地設置不是全局的<mirrors>具有更高的優先級。
  • 但是,對於<repositories>:pom - 最高,然後 - 本地,然後 - 全局。