上两篇中我们介绍了,有关Maven中仓库的内容,并且也简单介绍了mirror的内容。今天我们详细介绍一下mirror标签的内容,也就是Maven中的镜像。
镜像很简单,可以理解为镜子。简单来说也就是仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。并且我们知道Maven仓库的中央仓库地址是在国外的,如果直接访问的话,可能因为网络的原因导致速度较慢涉及下载组件失败。如果我们在国内搭建一个国内的镜像地址,然后在国内访问时直接使用这个地址,那么这个镜像仓库的地址就会提供比中央仓库更快的服务,并且内容完全一致。这就是Maven中镜像的目的。
下面配置就是之前介绍过的Maven中配置的阿里云的镜像地址。同样的也是需要在Maven中的settings.xml
文件中进行配置。
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
之前我们介绍过Maven中的中央仓库地址的id为central
。上面配置中的<mirrorOf>标签的值为central
,表示上面配置的是中央仓库的镜像,所有请求中央仓库的请求都会先请求这个镜像地址。其它三个标签id、name、url和仓库的配置一样没有任何区别。在实际上项目开发中我们通常会将*
,这表示所有对仓库的请求都会请求这个镜像地址。然后在将这个镜像地址配置成地的私服地址,这样就完成了私服和镜像的配置。
<mirrors>
<mirror>
<id>localhost</id>
<name>Internal Repository Manager</name>
<url>http://127.0.0.1/maven2/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
除了配置*
以外Maven为了满足一些复杂的需求,还支持更高级的镜像配置。具体配置如下:
*
匹配所有仓库。- external:* 除了本地缓存之后的所有仓库,也就是不在本机的远程仓库。
- repo1,repo2。匹配仓库repo1和repo2,中间用逗号分隔多个仓库。
*
,!repo1。匹配所有远程仓库,但除了repo1仓库。在Maven中可以使用感叹号将仓库从匹配列表中排除。