2009-06-24 36 views
27

我有興趣爲我的組織維護一個Maven 2存儲庫。什麼是一些指標和陷阱,將有所幫助。維護內部Maven倉庫的提示?

用戶在發佈代碼時設置從發佈或發佈自己的工件到存儲庫的標準時需要遵循的準則是什麼?你對這類事情有何種管理/規則?你在開發者指南/文檔中包含了什麼?

UPDATE:我們已經站在Nexus上,並對它非常滿意 - 遵循了Sal的大部分指導原則,並沒有遇到任何麻煩。另外,我們通過Hudson CI服務器限制了部署訪問和自動構建/部署快照構件。 Hudson可以分析所有上游/下游項目依賴關係,因此如果編譯問題,測試失敗或其他違規導致構建中斷,則不會進行部署。對Maven2/Maven3中的快照部署感到厭倦,因爲元數據在兩個版本之間發生了變化。 「僅限Hudson」快照部署策略將緩解這種情況。我們不使用Release Plugin,但是在將快照移動到發行版時,已經編寫了一些圍繞Versions plugin的管道。我們也使用m2eclipse,它似乎與Nexus一起工作得非常好,從設置文件中可以看到Nexus並知道從那裏索引工件信息以進行查找。 (儘管我不得不調整其中一些設置,以使其完全索引我們的內部快照。)如果您有興趣這樣做,我還建議您將帶有工件的源代碼jar作爲標準實踐部署。我們在一個超級POM中進行配置。

UPDATE2:我遇到this Sonatype whitepaper其中詳細收養/成熟的不同階段,每一個Maven倉庫管理不同的使用目的。

回答

27

我建議設置一個至少有四個存儲庫的nexus服務器。我不會推薦artifactory。對於少於三組的小於20人的開發團隊來說,免費版的nexus是完全不錯的。如果您的用戶數量超過此數量,請自行協助並支付Sonatype版本。 LDAP集成爲自己付出代價。

  1. 內部發布
  2. 內部快照
  3. 內部第三方在內部使用的代碼來自外部來源,或認可的第三方版本。將JDBC驅動程序,javax。*的東西以及來自客戶和合作夥伴的東西放在這裏。
  4. 外部代理像M2所有常見的來源普通代理,Codehaus的等

配置的Nexus做內部回購

  1. 上定期刪除舊的快照以下
  2. 刪除發佈時的快照
  3. 構建索引文件。這也加快了本地構建

有一個通用的settings.xml文件,使用這四個,只有這四個來源。如果您需要進行定製,請嘗試保留設置文件的常見部分,並使用配置文件查找差異。不要讓你的客戶推出他們自己的設置,否則你的代碼將只能在一臺機器上生成,而不能在任何其他機器上生成。

爲您的客戶提供一個通用代理。在Nexus中,您可以將一堆代理添加到常見的Maven資源(Apache,JBoss,Codehaus),並將一個代理暴露給內部客戶端。這使得從客戶端添加和移除源代碼變得更容易。

不要將內部和第三方工件混合在同一個存儲庫中。 Nexus允許您通過web gui將jar添加到內部存儲庫。我建議將此作爲將JDBC驅動程序和其他外部代碼添加到第三方的方式。與大多數企業軟件相比,該UI非常好用。

定義一個公共的父POM限定內部快照並經由distributionManagement標籤釋放回購。我知道很多人告訴你不要這樣做。雖然我毫不猶豫地承認這樣做存在各種問題,但如果客戶端只構建要部署到單個內部存儲庫的發行版和快照,那麼它確實可行。

如果你有一個現有的MIS管理Maven倉庫,創建5日回購稱爲傳統並把整個回購那裏。設置一個cron任務,在舊版文件中刪除舊文件。這讓每個人都有一年的時間從​​它身上移開並更新他們的poms。

建立一個易於遵守內部工件的命名約定。我更喜歡DepartmentIDFunction.Project的GroupID和componentName的ArtifactId。對於內部存儲庫,com/org/net和公司名稱可能無關緊要。如果公司更改了名字,那就錯了。銷售,會計或庫存部門重新命名的可能性要小得多。

3

也許這是顯而易見的,但是,對於可重複性,開發人員不應該覆蓋工件,它們應該是新版本。

這也適用於上游存儲庫。如果你下載Apache-commons 1.2.3版本,你應該永遠不要再下載它。修復來自後面的版本,不適用於現有版本。

+0

感謝您的澄清 - 我的意思是在使用發佈插件發佈他們自己擁有的存儲庫版本的情況下。將編輯該問題。 – cwash 2009-06-24 16:28:29

4

使用Artifactory

+1

很好的建議! +1 – 2009-06-24 16:26:52

+1

爲什麼?它提供的優勢是什麼? – cwash 2009-06-24 16:37:30

+1

這只是簡單的使用和免費。Nexus限制了免費版本的功能,但如果這不是問題(功能集沒有什麼不同或免費的部分),那也是好的。我放棄了'絕對',這有點太強大,altCognito打電話給我。 – stevedbrown 2009-06-24 17:38:29

7

絕對使用Nexus。 :P

我用過Nexus和Artifactory。 Nexus的界面更加強大,它具有更多的可配置性,當然,由Sonatype編寫,幾乎可以將Maven的所有內容都重新排列。

這就是說,Artifactory是體面和可行的。

+0

您能否解釋一下在鳥眼級別使其健壯/可配置的功能類型? – cwash 2009-06-24 16:39:27

4
我使用artifactory的自己

,愛用戶界面和易於部署/維護。也就是說,我從來沒有使用Nexus,並且不能真正幫助您進行適當的功能比較。

這裏有一些事情從我的頭頂,我真的很喜歡Artifactory的(記住的Nexus可能有這些功能太):

  1. 尼斯的Web 2.0界面。
  2. 導入本地Maven存儲庫以幫助您入門的能力。
  3. 易於與現有LDAP服務器集成以實現安全性(我是用於存儲憑證的單個存儲庫的忠實粉絲)。

鑑於實際上只有兩個主要的Maven Repository實現,如果您確實想確保您做出了正確的選擇,我建議您嘗試兩種方法,併爲自己決定您最喜歡哪一種。

3

由於該原來的問題(技術問題,構建M2存儲庫時要考慮的),我會建議創建只讀用戶用於瀏覽存儲庫和每個管理員的管理員用戶(即:對於所有非管理員用戶的只讀用戶)。 此外,我會建議定期生成備份映像(每天一次?也許?)。如果您的存儲庫很大,或者您經常安裝自己的工件,這兩者都非常重要。

最後但並非最不重要的是,在添加新的遠程存儲庫時,您必須添加包含/排除過濾器,以便更快地完成存儲庫中的工件查找。

還有很多其他問題需要考慮,但這些是我在管理Maven內部存儲庫時遇到的主要問題。

爲了記錄,我使用Nexus和Artifactory;我可以清楚地說明,儘管Nexus非常簡單並且可操作(儘管我有時在Ubuntu上安裝過程中遇到問題),但其免費版本無法與Artifactory的社區(免費)版本競爭。除了Artifactory的真棒網頁2用戶界面,其主要功能(如安全管理,定期備份和可訪問性問題)遠遠超出了Nexus。