maven中Mirror和Repository 的詳細講解

maven中Mirror和Repository 的詳細講解

參考地址,侵權刪
https://www.sojson.com/blog/168.html

Repository(倉庫)
Maven倉庫主要有2種:
remote repository:相當於公共的倉庫,大家都能訪問到,一般可以用URL的形式訪問;
local repository:存放在本地磁盤的一個文件夾;
Remote Repository主要有3種:
中央倉庫:http://repo1.maven.org/maven2/
私服:內網自建的maven repository,其URL是一個內部網址
其他公共倉庫:其他可以互聯網公共訪問maven repository,例如 jboss repository等
repository裏存放的都是各種jar包和maven插件。
當向倉庫請求插件或依賴的時候,
會先檢查local repository,
如果local repository有則直接返回,否則會向remote repository請求,
並緩存到local repository。也可以把做的東西放到本地倉庫,
僅供本地使用;或上傳到遠程倉庫,供大家使用。

Mirror
mirror相當於一個攔截器,
它會攔截maven對remote repository的相關請求,
把請求裏的remote repository地址,重定向到mirror裏配置的地址。
如果倉庫X可以提供倉庫Y存儲的所有內容,
那麼就可以認爲X是Y的一個鏡像。換句話說,任何一個可以從倉庫Y獲得的構件,
都夠從它的鏡像中獲取。

<mirrorOf></mirrorOf>
<mirrorOf></mirrorOf>標籤裏面放置的是要被鏡像的Repository ID。
爲了滿足一些複雜的需求,Maven還支持更高級的鏡像配置:

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

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

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

Repository與Mirror
定義
mirror表示的是兩個Repository(阿里雲鏡像倉庫和中央倉庫)之間的關係,
在maven配置文件(setting.xml)裏配置 了<mirrors><mirror>..........</mirror></mirrors>,
即定義了兩個Repository之間的鏡像關係。

目的
配置兩個Repository之間的鏡像關係,一般是出於訪問速度和下載速度考慮。
例如, 有一個項目,需要在公司和住所都編碼,並
在項目pom.xml配置了A Maven庫。
在公司,是電信網絡,訪問A庫很快,所以maven管理依賴和插件都從A庫下載;
在住所,是網通網絡,訪問A庫很慢,但是訪問B庫很快。這 時,在住所的setting.xml裏,
只要配置一 下<mirrors><mirror>....</mirror></mirrors>,讓B庫成爲A 庫的mirror,即可不用更改項目pom.xml裏對於A庫的相關配置。

如果該鏡像倉庫需要認證,則配置setting.xml中的<server></server>即可。

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

私服
私服是一種特殊的遠程Maven倉庫,
它是架設在局域網內的倉庫服務,私服一般被配置爲互聯網遠程倉庫的鏡像,
供局域網內的Maven用戶使用。

當Maven需要下載構件的時候,先向私服請求,如果私服上不存在該構件,則從外部的遠程倉庫下載,
同時緩存在私服之上,然後爲Maven下載請求提供下載服務,另外,對於自定義或第三方的jar可以從本地上傳到私服,供局域網內其他maven用戶使用。

優點主要有:

節省外網寬帶
加速Maven構建
部署第三方構件
提高穩定性、增強控制:原因是外網不穩定
降低中央倉庫的負荷:原因是中央倉庫訪問量太大

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章