2009-09-25 82 views
4

我想讓Nexus(或Artifactory,我們還沒有決定)存儲一個工件的副本,當它從互聯網上的公共存儲庫(如Maven Central)下載時。Nexus/Artifactory可以存儲互聯網Maven工件的副本嗎?

基本上,如果你沒有在你的本地倉庫中使用jar,而且倉庫管理員也沒有它,我想問問倉庫的倉庫管理員,是否將它發送給我,然後存儲它無論是在回購經理還是在本地回購中。然後,當另一個人向回購經理詢問同一個罐子時,它會將其從回購管理器發送給他們,並將其保存在本地回購中,而無需擊中Maven中心。

這聽起來像它應該如何開箱即用,但我沒有看到它。我可以通過回購管理器看到Maven中心的工件,但是當我使用Netbeans爲我的項目添加依賴項時,它直接從Maven中心(顯然)下載它。沒有任何東西會被緩存在回購管理器中(據我所知)。

回答

5

Nexus具有代理庫的概念,它幾乎完全符合您的描述。詳情請參閱本書的Proxying Public Repositories部分。

Artifactory有一個類似的功能,稱爲Virtual repositories

代理和緩存遠程公共存儲庫可以通過減少公共Internet上的冗餘下載來加速構建。如果組織中的開發人員需要下載Spring Framework 2.5版本並使用Nexus,則只需從遠程存儲庫下載一次依賴項(以及依賴項的依賴項)即可。通過與互聯網的高速連接,這可能看起來是一個小問題,但如果您不斷要求開發人員下載數百兆第三方依賴項,真正的成本節省將是Maven需要的時間檢查新版本的依賴關係,並通過公共互聯網下載依賴關係。

您可以通過將您的存儲庫管理器設置爲中央鏡像來阻止您的Maven安裝嘗試連接到中央,然後將請求發送到您的存儲庫管理器。例如添加以下Maven的settings.xml中的<mirrors>部分請求中央重定向到您的存儲庫管理:

<mirror> 
    <id>central-proxy</id> 
    <mirrorOf>central</mirrorOf> 
    <url>http://myrepo/nexus/content/groups/public</url> 
</mirror> 

我傾向於建立一個repository group包含多個遠程倉庫。就我的Maven安裝而言,該組充當單個存儲庫,但會整理來自多個遠程存儲庫的工件。

+0

我的maven安裝似乎是從我的Nexus安裝中獲取maven中央回購站,但是我看不到在服務器上緩存的任何內容。我從默認安裝中更改的唯一情況是告訴Maven Central代理下載MC索引。 – 2009-10-02 20:26:29

+0

如果您已將鏡像設置爲指向公共組,則應在「Maven Central」存儲庫下方看到下載的工件。你沒看到嗎? – 2009-10-02 21:30:44

2

來自其他公共存儲庫的代理和緩存工件確實(或應該)是內置於任何體面的企業存儲庫管理器中的。在公司環境中,開發團隊應該能夠開發和構建他們的軟件,即使公共存儲庫已關閉。這是一個非常基本的用例,也是使用公司存儲庫的原因之一(不依賴於您不能控制的公共資源)。

一旦存儲庫管理器安裝並配置完畢,您需要配置maven來檢查存儲庫而不是公共存儲庫。爲此,請在您的~/.m2/settings.xml中編輯您的鏡像設置(如Rich指出的那樣)。有關更多詳細信息,請參閱Nexus Book的3.2. Configuring Maven to Use a Single Nexus Group部分(該配置適用於任何存儲庫管理器)。

在企業環境中,我更喜歡給力的Maven有它反映所有庫請求使用單個存儲庫。要實現此目的,請將mirrorOf設置爲*

<settings> 
    ... 
    <mirrors> 
    <mirror> 
     <id>nexus</id> 
     <mirrorOf>*</mirrorOf> 
     <name>Maven Repository Manager running on repo.mycompany.com</name> 
     <url>http://repo.mycompany.com/proxy</url> 
    </mirror> 
    </mirrors> 
    ... 
</settings> 
1

在Artifactory的,你可以使用「首頁 - > Maven的設置」頁面,下載一個maven的設置,將強制Maven來使用你選擇只Artifactory的虛擬存儲庫。這與虛擬存儲庫中的存儲庫參考清理相結合將確保您永遠不會查詢maven central。

您的NetBeans問題可以通過在您的Maven安裝中強制執行repo聲明來解決。上次我使用NetBeans Maven支持時,我還指定了一個項目級settings.xml文件來涵蓋每種情況。

側面注意:使用mirrorOf功能非常粗魯,可能會導致奇怪的行爲。

相關問題