Maven:mirror(镜像)和repository(仓库) 区别

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。如果填*,就会替代所有仓库。 

转自:http://blog.csdn.net/caomiao2006/article/details/40401517

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值