Maven:mirror和repository 區別


轉自:https://blog.csdn.net/yu870646595/article/details/51578275

internal repository是指在局域網內部搭建的repository,它跟central repository, jboss repository等的區別僅僅在於其URL是一個內部網址 
mirror則相當於一個代理,它會攔截去指定的遠程repository下載構件的請求,然后從自己這里找出構件回送給客戶端。配置mirror的目的一般是出於網速考慮。 
可以看出,internal repository和mirror是兩碼事。前者本身是一個repository,可以和其它repository一起提供服務,比如它可以用來提供公司內部的maven構件;而后者本身並不是repository,它只是遠程repository的網絡加速器。 

不過,很多internal repository搭建工具往往也提供mirror服務,比如Nexus就可以讓同一個URL,既用作internal repository,又使它成為所有repository的mirror。

如果倉庫X可以提供倉庫Y存儲的所有內容,那么就可以認為X是Y的一個鏡像。換句話說,任何一個可以從倉庫Y獲得的構件,都胡夠從它的鏡像中獲取。舉個例子,http://maven.net.cn/content/groups/public/ 是中央倉庫http://repo1.maven.org/maven2/ 在中國的鏡像,由於地理位置的因素,該鏡像往往能夠提供比中央倉庫更快的務。因此,可以配置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配置倉庫認證。 
關於鏡像的一個更為常見的用法是結合私服。由於私服可以代理任何外部的公共倉庫(包括中央倉庫),因此,對於組織內部的Maven用戶來說,使用一個私服地址就等於使用了所有需要的外部倉庫,這可以將配置集中到私服,從而簡化Maven本身的配置。在這種情況下,任何需要的構件都可以從私服獲得,私服就是所有倉庫的鏡像。這時,可以配置這樣的一個鏡像,如例:  

?
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仍將無法訪問被鏡像倉庫,因而將無法下載構件。

 

 

 

簡單點來說,repository就是個倉庫。maven里有兩種倉庫,本地倉庫和遠程倉庫。遠程倉庫相當於公共的倉庫,大家都能看到。本地倉庫是你本地的一個山寨版,只有你看的到,主要起緩存作用。當你向倉庫請求插件或依賴的時候,會先檢查本地倉庫里是否有。如果有則直接返回,否則會向遠程倉庫請求,並做緩存。你也可以把你做的東西上傳到本地倉庫給你本地自己用,或上傳到遠程倉庫,供大家使用。 
遠程倉庫可以在工程的pom.xml文件里指定,樓上兩位已經列的很清楚了。如果沒指定,默認就會把下面這地方做遠程倉庫,即默認會到http://repo1.maven.org/maven2這個地方去請求插件和依賴包。 
   

Xml代碼   收藏代碼
  1. <repository>  
  2.       <snapshots>  
  3.         <enabled>false</enabled>  
  4.       </snapshots>  
  5.       <id>central</id>  
  6.       <name>Maven Repository Switchboard</name>  
  7.       <url>http://repo1.maven.org/maven2</url>  
  8.     </repository>  


本地倉庫默認在你本地的用戶目錄下的.m2/repository目錄下。 

mirror就是鏡像,主要提供一個方便地切換遠程倉庫地址的途徑。比如,上班的時候在公司,用電信的網絡,連的是電信的倉庫。回到家后,是網通的網絡,我想連網通的倉庫,就可以通過mirror配置,統一把我工程里的倉庫地址都改成聯通的,而不用到具體工程配置文件里一個一個地改地址。 
mirror的配置在.m2/settings.xml里。如: 

Xml代碼   收藏代碼
  1. <mirrors>  
  2.   <mirror>  
  3.     <id>UK</id>  
  4.     <name>UK Central</name>  
  5.     <url>http://uk.maven.org/maven2</url>  
  6.     <mirrorOf>central</mirrorOf>  
  7.   </mirror>  
  8. </mirrors>  


這樣的話,就會給上面id為central的遠程倉庫做了個鏡像。以后向central這個倉庫發的請求都會發到http://uk.maven.org/maven2而不是http://repo1.maven.org/maven2了。 
<mirrorOf>central</mirrorOf>里是要替代的倉庫的id。如果填*,就會替代所有倉庫。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM