如果一個倉庫 A 可以提供另一個倉庫 B 的所有內容,那么就可以認為倉庫 A 是倉庫 B 的一個鏡像。即倉庫 B 中的任何一個構件都能從它的鏡像中獲取。
使用鏡像代替中央倉庫
國內開發人員由於網絡原因,直接從中央倉庫下載構件時,速度較慢或不穩定,我們通常會使用中央倉庫的國內鏡像站來解決該問題。
配置 Maven 鏡像的方法也非常的簡單,我們只需要在 Maven 安裝目錄中 setting.xml 文件的 mirrors 節點中,使用 mirror 標簽添加鏡像的相關信息即可。
阿里雲鏡像地址
<mirror> <id>aliyun</id> <mirrorOf>central</mirrorOf> <name>aliyun</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
華為雲鏡像地址
<mirror> <id>huaweicloud</id> <name>mirror from maven huaweicloud</name> <mirrorOf>central</mirrorOf> <url>https://repo.huaweicloud.com/repository/maven/</url> </mirror>
以上配置中,mirrorOf 的取值為 central,表示該配置為中央倉庫的鏡像,所有對於中央倉庫的請求都會轉到該鏡像。當然,我們也可以使用以上方式配置其他倉庫的鏡像。另外三個元素 id、name 和 url 分別表示鏡像的唯一標識、名稱和地址。
鏡像與 Maven 私服配合使用
鏡像通常會和 Maven 私服配合使用,由於 Maven 私服可以代理所有外部的公共倉庫(包括中央倉庫),因此對於組織內部的用戶來說,使用一個私服就相當於使用了所有需要的外部倉庫,這樣就可以將配置集中到私服中,簡化 Maven 本身的配置。這種情況下,用戶所有所需的構件都可以從私服中獲取,此時私服就是所有倉庫的鏡像。
<srttings> ... <mirrors> <mirror> <id>nexus</id> <mirrorOf>*</mirrorOf> <name>nexus</name> <url></url> </mirror> </mirrors> ... </settings>
以上配置中,mirrorOf 元素的取值為 * ,表示匹配所有遠程倉庫,所有對於遠程倉庫的請求都會被攔截,並跳轉到 url 元素指定的地址。
為了滿足一些較為復雜的需求,Maven 還支持一些更為高級的配置。
- <mirrorOf>*</mirrorOf>:匹配所有遠程倉庫。
- <mirrorOf>external:*</mirrorOf>:匹配所有遠程倉庫,使用 localhost 和 file:// 協議的除外。即,匹配所有不在本機上的遠程倉庫。
- <mirrorOf>repo1,repo2</mirrorOf>:匹配倉庫 repo1 和 repo2,使用逗號分隔多個遠程倉庫。
- <mirrorOf>*,!repo1</miiroOf>:匹配所有遠程倉庫,repo1 除外,使用感嘆號將倉庫從匹配中排除。