2010-02-08 128 views
44

哪裏是指定maven項目所需儲存庫的最佳位置,pom.xmlsettings.xml?每個地點有什麼優點和缺點?什麼是最佳做法?哪裏是指定maven倉庫,pom.xml或settings.xml的最佳位置?

在我看來,在POM定義庫是有很多原因更好:

  • 重複性:從屬文物是從在POM顯式聲明的已知位置來。用戶配置不當的存儲庫導致問題的機會也較少。
  • 可移植性:此POM將建立在安裝了maven的任何人的機器上。對額外的用戶配置的存儲庫設置沒有額外的要求。
  • 易用性:新開發人員更容易檢索和構建項目,因爲安裝的配置較少。

也許一個反面的是,如果在未來的存儲庫的位置發生變化,需要安裝或舊的軟件補丁發佈需要被釋放指定新的存儲庫位置代理(或.m2/settings.xml可以隨時提供額外的存儲庫作爲最後的手段)。但是,這似乎是發佈管理中良好的可重複性和可移植性的必要分支,而不是一個騙局。

還有其他想法嗎?

+2

如果回購庫位發生變化,您只需更新pom並確保每個人都刷新其本地副本。 – 2010-02-08 23:09:20

+0

正確,但舊版本可能已作爲發行版發佈(例如:zip,tar.gz)。重現性的一個好處是您可以採取任何分配/版本,無​​論出於何種原因應用補丁,並且您都可以獲得確切的功能分佈以及補丁,而無需其他任何補丁。 – jnorris 2010-02-08 23:13:34

+0

我的意見與@jnorris完全一致,但Sonatype提供了一些要考慮的問題(可能過時了?):關於將URL保留在分佈式POM文件中:http://blog.sonatype.com/2009/02/why-putting-repositories-in - 你的poms是一個壞主意/ – chrisinmtown 2017-12-26 16:30:52

回答

44

哪裏是指定Maven項目需要的存儲庫,pom.xml或settings.xml的最佳位置?每個地點有什麼優點和缺點?什麼是最佳做法?

我會親自定義項目pom.xml中的特定項目所需的存儲庫,因爲它使構建更加便攜。僅在我看來,settings.xml文件應該用於用戶特定或祕密事物。沒有什麼,要求用戶添加存儲庫位置,即使這是正確記錄,不知何故擊敗了maven的功能之一(透明依賴處理),我不喜歡這個想法。

我認爲使用settings.xml來處理存儲庫的唯一「好」用例是當你有一個公司存儲庫並希望Maven使用這個存儲庫而不是公共存儲庫時。例如,爲了避免任何公共資源庫連接,你將宣佈公司資源庫中的所有的人的一面鏡子:

<settings> 
    ... 
    <mirrors> 
    <mirror> 
     <id>proxy-of-entire-earth</id> 
     <mirrorOf>*</mirrorOf> 
     <name>Maven Repository Manager running on repo.mycompany.com</name> 
     <url>http://repo.mycompany.com/proxy</url> 
    </mirror> 
    </mirrors> 
    ... 
</settings> 
+0

+1。這解決了我自己在琢磨這個問題時想到的「假設」。 1)如果鏡像「消失」並且您需要提供一個新鏡像(如果該項目未被維護並且您想要保持原始樹原始狀態),該怎麼辦?在settings.xml中設置鏡像2)如果您只想在某些環境中使用私有本地報告,該怎麼辦?按照您的建議在settings.xml中使用通配符鏡像。 – 2012-09-21 06:46:22

+0

FWIW,此信息現在也在Maven文檔中http://maven.apache.org/guides/mini/guide-mirror-settings.html#Using_A_Single_Repository – 2013-04-03 19:00:39

15

我建議你閱讀有關的主題this博客文章。

+2

[總是引用重要鏈接中最相關的部分,以防萬一目標站點無法訪問或永久脫機。](http://stackoverflow.com/help/how-to-answer) – Poke 2017-03-02 16:15:50

2

我總是把URL放在POM和密碼settings.xml中。如果將URL放在settings.xml中,則如果URL發生更改,則需要用戶更新其本地系統上的文件。如果URL是在您的POM中指定的,則可以更改它並推送新版本。網址的變化比大多數人預測的要更頻繁,並且在構建中斷時導致用戶感到沮喪。

密碼保存在settings.xml中,原因很明顯。密碼不應該保存在版本控制中。您需要密碼才能將mvn部署功能部署到遠程存儲庫。

+0

要查看應如何設置〜/ .m2/settings.xml的示例,請參閱http ://stackoverflow.com/questions/2941605/sample-settings-xml-for-maven – akauppi 2016-06-30 11:34:15

相關問題