maven:mirrors和repository的關係區別

https://www.cnblogs.com/keyi/p/7475901.html

https://zhidao.baidu.com/question/1498312942438533419.html

原文地址:http://my.oschina.NET/sunchp/blog/100634

1 Repository(倉庫)

1.1 Maven倉庫主要有2種:

  • remote repository:相當於公共的倉庫,大家都能訪問到,一般可以用URL的形式訪問

  • local repository:存放在本地磁盤的一個文件夾,例如,windows上默認是C:\Users\{用戶名}\.m2\repository目錄

1.2 Remote Repository主要有3種:

  • 中央倉庫:http://repo1.maven.org/maven2/ 

  • 私服:內網自建的maven repository,其URL是一個內部網址 

  • 其他公共倉庫:其他可以互聯網公共訪問maven repository,例如 jboss repository等

 關於私服參照:http://blog.csdn.net/zwc0910/article/details/17349111

repository裏存放的都是各種jar包和maven插件。當向倉庫請求插件或依賴的時候,會先檢查local repository,如果local repository有則直接返回,否則會向remote repository請求,並緩存到local repository。也可以把做的東西放到本地倉庫,僅供本地使用;或上傳到遠程倉庫,供大家使用。 

 

2 Mirror

mirror相當於一個攔截器,它會攔截maven對remote repository的相關請求,把請求裏的remote repository地址,重定向到mirror裏配置的地址。

2.1 沒有配置mirror:

2.2 配置mirror:

此時,B Repository被稱爲A Repository的鏡像。

如果倉庫X可以提供倉庫Y存儲的所有內容,那麼就可以認爲X是Y的一個鏡像。換句話說,任何一個可以從倉庫Y獲得的構件,都胡夠從它的鏡像中獲取。

2.3 <mirrorOf></mirrorOf> 

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

  • <mirrorOf>*</mirrorOf> 

            匹配所有遠程倉庫。 

  • <mirrorOf>repo1,repo2</mirrorOf> 

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

  • <mirrorOf>*,!repo1</miiroOf> 

            匹配所有遠程倉庫,repo1除外,使用感嘆號將倉庫從匹配中排除。 


3 Repository與Mirror

3.1 定義

其實,mirror表示的是兩個Repository之間的關係,在maven配置文件(setting.xml)裏配置了<mirrors><mirror>..........</mirror></mirrors>,即定義了兩個Repository之間的鏡像關係。

3.2 目的

配置兩個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>即可。

3.3  注意

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

 

4 私服

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

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

優點主要有:

  1. 節省外網寬帶

  2. 加速Maven構建

  3. 部署第三方構件

  4. 提高穩定性、增強控制:原因是外網不穩定

  5. 降低中央倉庫的負荷:原因是中央倉庫訪問量太大

 

PS:Maven倉庫示意圖

 

鏡像是爲了提供更快的服務

 

編輯settings.xml配置中央倉庫鏡像:

1

2

3

4

5

6

7

8

9

10

11

12

<settings>  

  ...  

  <mirrors>  

    <mirror>  

      <id>maven.net.cn</id>  

      <name>one of the central mirrors in china</name>  

      <url>http://maven.net.cn/content/groups/public/</url>  

      <mirrorOf>central</mirrorOf>  

    </mirror>  

  </mirrors>  

  ...  

</settings>

該例中,<mirrorOf>的值爲central,表示該配置爲中央倉庫的鏡像,任何對於中央倉庫的請求都會轉至該鏡像,用戶也可以使用同樣的方法配置其他倉庫的鏡像。

另外三個元素id,name,url與一般倉庫配置無異,表示該鏡像倉庫的唯一標識符、名稱以及地址。類似地,如果該鏡像需認證,也可以基於該id配置倉庫認證。

 

任何需要的構件都可以從私服獲得,私服就是所有倉庫的鏡像。這時,可以配置這樣的一個鏡像,如例: 

 

1

2

3

4

5

6

7

8

9

10

11

12

<settings>  

  ...  

  <mirrors>  

    <mirror>  

      <id>internal-repository</id>  

      <name>Internal Repository Manager</name>  

      <url>http://192.168.1.100/maven2</url>  

      <mirrorOf>*</mirrorOf>  

    </mirror>  

  </mirrors>  

  ...  

</settings>

 

該例中<mirrorOf>的值爲星號,表示該配置是所有Maven倉庫的鏡像,任何對於遠程倉庫的請求都會被轉至http://192.168.1.100/maven2/

如果該鏡像倉庫需要認證,則配置一個Id爲internal-repository的<server>即可。

 

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

 

1.<mirrorOf>*</mirrorOf>

匹配所有遠程倉庫。

 

2.<mirrorOf>external:*</mirrorOf>

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

 

3.<mirrorOf>repo1,repo2</mirrorOf>

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

 

4.<mirrorOf>*,!repo1</miiroOf>

匹配所有遠程倉庫,repo1除外,使用感嘆號將倉庫從匹配中排除。

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

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