使用倉庫鏡像
倉庫可以聲明在項目中,但有時,你可能想要使用某個倉庫的鏡像,而不去修改項目文件。
使用鏡像的原因:
- 有一個同步鏡像,且速度更快。
- 想使用你自己控制的內部倉庫。
- 想運行repository manager來提供一個本地的緩存(鏡像),然后使用該緩存的URL。
為了配置給定倉庫的鏡像,你需要在 ${user.home}/.m2/settings.xml 中提供該新倉庫的 id 和 url,并指定 mirrorOf 的值 -- 就是你想鏡像的倉庫的ID。
例如,Maven 中央美國倉庫的ID默認是central,所以,想使用歐洲中央倉庫的話,你可以這樣配置:
<settings>...<mirrors><mirror><id>UK</id><name>UK Central</name><url>http://uk.maven.org/maven2</url><mirrorOf>central</mirrorOf></mirror></mirrors>... </settings>
注意,對于給定的某個倉庫來說,最多只能有一個鏡像。就是說,不管有幾個鏡像,其 <mirrorOf>的值不能重復! Maven不會聚集鏡像,而是會簡單的揀出第一個符合的。 如果你想提供由多個倉庫組成的view,請使用一個 repository manager。
The settings descriptor documentation can be found on the Maven Local Settings Model Website.
注意:官方Maven 2 倉庫是http://repo.maven.apache.org/maven2 位于美國,或者 http://uk.maven.org/maven2 位于英國。
Repository Metadata 中有一個已知的鏡像列表。這些鏡像的內容可能不盡相同,我們(maven官方)也不會以任何形式支持它們。
?
使用一個單獨的倉庫
你可以強制Maven使用一個單獨的倉庫 -- 通過讓該倉庫鏡像所有的倉庫請求。該倉庫必須包含所有需要的artifacts,或者能夠代理請求到其他倉庫。 當使用一個內部公司倉庫時,這很有用,可以使用Maven Repository Manager來代理外部的請求。
只需要將 <mirrorOf>的值設為 * 即可!
注意:該功能僅支持Maven 2.0.5+。
<settings>...<mirrors><mirror><id>internal-repository</id><name>Maven Repository Manager running on repo.mycompany.com</name><url>http://repo.mycompany.com/proxy</url><mirrorOf>*</mirrorOf></mirror></mirrors>... </settings>
?
高級鏡像指南
當配合repository manager時,一個單一的鏡像可以處理多個倉庫。
該語法自 Maven 2.0.9 起:
- *? 匹配所有的倉庫id。
- external:*? 匹配所有的倉庫,除了那些使用localhost 或 基于文件的倉庫。當你想排除重定向倉庫(用于集成測試)時,可以配合repository manager來使用。
- ,? 多個倉庫可以使用逗號來拼接。
- !? 可以配合上面提到的某個通配符使用,以排除某個倉庫id。
在逗號間隔的倉庫標識符列表中,通配符的位置不如 。。。(長句,懶得翻譯) 重要。
The position of wildcards within a comma separated list of repository identifiers is not important as the wildcards defer to further processing and explicit includes or excludes stop the processing, overruling any wildcard match.
當你使用高級語法,并配置多個鏡像時,請記住 它們的聲明順序不是無所謂的。當Maven查找某個倉庫的鏡像時,它會先檢查<mirrorOf>最匹配的鏡像。如果沒有直接匹配的,Maven會使用第一個聲明的鏡像--按照上面提到的規則(如果有的話)。
例子:
- * 代表任意的。
- external:* 代表任意不在localhost上的,或不是基于文件的。
- repo,repo1 代表repo 或 repo1。
- *,!repo1 代表任意的,但除了repo1 。
注意,該功能僅支持 Maven 2.0.9+。
<settings>...<mirrors><mirror><id>internal-repository</id><name>Maven Repository Manager running on repo.mycompany.com</name><url>http://repo.mycompany.com/proxy</url><mirrorOf>external:*,!foo</mirrorOf></mirror><mirror><id>foo-repository</id><name>Foo</name><url>http://repo.mycompany.com/foo</url><mirrorOf>foo</mirrorOf></mirror></mirrors>... </settings>
?
創建你自己的鏡像
中央倉庫的大小是穩步增長的。 為了節省我們的帶寬和你的時間,鏡像整個中央倉庫是不被允許的。(這樣做會被自動禁止) 相反,我們建議你設置一個repository manager作為代理。
如果你想成為一個官方鏡像,請聯系我們。
?
?
?
?
?
官方文檔鏈接:
http://maven.apache.org/guides/mini/guide-mirror-settings.html