2016-04-21 27 views
8

如果我錯了,請更正我的錯誤,但鏡像用於將所有流量重定向到特定存儲庫URL並阻止其他所有內容(包括Maven中央庫)。什麼是Maven settings.xml文件中的鏡像?

現在如果我有一個鏡像到http://a.com:8081和一個存儲庫到http://b.com:8081。第二個URL會被使用嗎?我認爲答案是否定的。你可以有多個鏡子嗎?

回答

9

如果我錯了,請更正我的錯誤,但鏡像用於將所有流量重定向到特定存儲庫URL並阻止其他所有內容(包括Maven中央回購)。

這不完全正確。 Maven通過在定義的repositories內搜索它們來下載文物。這些存儲庫在項目的POM或Maven設置中定義。但是,正如在Mirror documentation規定:

但是,您可能想使用另一種鏡特定倉庫,但不會改變項目文件。

讓我們從文檔的例子和評論:

<mirrors> 
    <mirror> 
    <id>UK</id> 
    <name>UK Central</name> 
    <url>http://uk.maven.org/maven2</url> 
    <mirrorOf>central</mirrorOf> 
    </mirror> 
</mirrors> 

這定義了一個鏡子,將使用時Maven會想獲取來自中央Maven的依賴。假設您有2個當前的存儲庫,它們是Maven Central和自定義的倉庫A.以下情況會發生:

  1. 您正在聲明對工件的依賴關係;
  2. Maven將在您定義的存儲庫中查找該依賴關係,因此它會在存儲庫A和Maven Central中查找它;
  3. 假設它以A開頭:它會按照您所期望的那樣擊中爲該存儲庫定義的URL。那麼讓我們說,它沒有在那裏找到;
  4. 然後它會看Maven Central。但是,Maven會注意到爲該存儲庫配置了一個鏡像。它不會在repo1.maven.org上擊中Maven Central。相反,它將從uk.maven.org中獲取它,這是在鏡像配置元素中定義的URL。

如本例所示,鏡像僅適用於某些存儲庫,這些存儲庫使用<mirrorOf>配置元素定義。在前一種情況下,我們有<mirrorOf>central</mirrorOf>這意味着「鏡像Maven中心」。此元素can have various values,和文檔gives examples

例子:

  • * =一切
  • external:* =一切不是本地主機上,而不是基於文件的。
  • repo,repo1 =回購或repo1
  • *,!repo1 =一切,除了repo1:

現在,如果我有一面鏡子http://a.com:8081和存儲庫http://b.com:8081。第二個URL會被使用嗎?我假設答案是否定的。

以上顯示答案並非嚴格否定。當Maven嘗試從它鏡像的存儲庫中的一個存儲庫中獲取依賴關係時,將使用到http://a.com:8081的鏡像。如果它確實將存儲庫鏡像到http://b.com:8081,則不會請求http://b.com:8081(它們將被重定向到http://a.com:8081);但如果沒有,Maven將像往常一樣繼續從http://b.com:8081獲取依賴關係。


你可以有多個鏡像?

是的,你可以。

相關問題