讀古今文學網 > Maven實戰 > 6.7 鏡像 >

6.7 鏡像

如果倉庫X可以提供倉庫Y存儲的所有內容,那麼就可以認為X是Y的一個鏡像。換句話說,任何一個可以從倉庫Y獲得的構件,都能夠從它的鏡像中獲取。舉個例子,http://maven.net.cn/content/groups/public/是中央倉庫http://repo1.maven.org/maven2/在中國的鏡像,由於地理位置的因素,該鏡像往往能夠提供比中央倉庫更快的服務。因此,可以配置Maven使用該鏡像來替代中央倉庫。編輯settings.xml,見代碼清單6-7。

代碼清單6-7 配置中央倉庫鏡像

該例中,<mirrorOf>的值為central,表示該配置為中央倉庫的鏡像,任何對於中央倉庫的請求都會轉至該鏡像,用戶也可以使用同樣的方法配置其他倉庫的鏡像。另外三個元素id、name、url與一般倉庫配置無異,表示該鏡像倉庫的唯一標識符、名稱以及地址。類似地,如果該鏡像需要認證,也可以基於該id配置倉庫認證。

關於鏡像的一個更為常見的用法是結合私服。由於私服可以代理任何外部的公共倉庫(包括中央倉庫),因此,對於組織內部的Maven用戶來說,使用一個私服地址就等於使用了所有需要的外部倉庫,這可以將配置集中到私服,從而簡化Maven本身的配置。在這種情況下,任何需要的構件都可以從私服獲得,私服就是所有倉庫的鏡像。這時,可以配置這樣的一個鏡像,見代碼清單6-8。

代碼清單6-8 配置使用私服作為鏡像

該例中<mirrorOf>的值為星號,表示該配置是所有Maven倉庫的鏡像,任何對於遠程倉庫的請求都會被轉至http://192.168.1.100/maven2/。如果該鏡像倉庫需要認證,則配置一個id為internal-repository的<server>即可,詳見第5.4節。

為了滿足一些複雜的需求,Maven還支持更高級的鏡像配置:

·<mirrorOf>*</mirrorOf>:匹配所有遠程倉庫。

·<mirrorOf>external:*</mirrorOf>:匹配所有遠程倉庫,使用localhost的除外,使用file://協議的除外。也就是說,匹配所有不在本機上的遠程倉庫。

·<mirrorOf>repo1,repo2</mirrorOf>:匹配倉庫repo1和repo2,使用逗號分隔多個遠程倉庫。

·<mirrorOf>*,!repo1</mirrorOf>:匹配所有遠程倉庫,repo1除外,使用感歎號將倉庫從匹配中排除。

需要注意的是,由於鏡像倉庫完全屏蔽了被鏡像倉庫,當鏡像倉庫不穩定或者停止服務的時候,Maven仍將無法訪問被鏡像倉庫,因而將無法下載構件。