首先需要理解两个概念:
仓库(Repository )和镜像(Mirror )
仓库分为:本地仓库和远程仓库。远程仓库可配置多个。
每次更新maven,理论上应该从远程仓库下载jar包到本地仓库。
配置镜像后,即会拦截下载请求,去镜像下载。但是并不是所有库都得去镜像下载,所以,可以配置mirrorOf,取消一些含有特殊jar包的仓库(例如企业私服,当然使用企业私服作为镜像的是另外一种类型,我们公司的企业私服不能联网,只是自己开发的一些jar包发布在那里)。
<!-- 以下<mirror>的含义是:项目中所有向central这个仓库发的请求,都会转发到http://maven.aliyun.com/nexus/content/groups/public/而不是https://repo.maven.apache.org/maven2了。-->
<mirrors>
<mirror>
<!-- id表示该镜像的唯一标识符, 用来区分不同的mirror元素,
同时会使用server中id相同的授权配置链接到镜像,也就是说如果该镜像需要认证,
则需要配置一个id为aliyun的<server>即可 -->
<id>aliyun</id>
<name>aliyun maven</name>
<!-- 被镜像的仓库的id, 必须与repository节点设置的 ID 一致。
| mirrorOf 的配置语法:
| central = 表示该镜像为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像(http://maven.aliyun.com/nexus/content/groups/public/)。
| * = 匹配所有远程仓库,这样的话所有在pom中定义的仓库都不生效了。
| external:* = 匹配除localhost、使用file://协议外的所有远程仓库。
| repo1,repo2 = 匹配仓库repo1和repo2。
| *,!repo1 = 匹配所有远程仓库, repo1 除外。
|-->
<mirrorOf>central</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
MAVEN中镜像和仓库的优先级?
pom.xml 和 setting.xml 中配置的仓库和镜像优先级关系(mirror 优先级高于 repository):
mirror(setting.xml)> repository(pom.xml) > repository(setting.xml)
如果镜像配置了 mirrorOf = *, 则不管项目的 pom.xml 配置了什么仓库, 最终都会被镜像到镜像仓库
<mirrors>
<mirror>
<id>mirror</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://116.62.220.224:8888/repository/testGroup/</url>
</mirror>
</mirrors>
<servers>
<server>
<id>mirror</id>
<username>user</username>
<password>123456</password>
</server>
</servers>
这样所有的依赖都会被拦截到镜像地址下载。
镜像相当于起到拦截和请求转发的作用,而私服则起到加速下载构建和存储第三方构建,节省本地maven配置等作用,二者结合可以使maven的优点体现地淋漓尽致。
原文链接:https://blog.csdn.net/yehao279/article/details/84617822