详解Maven的setting配置文件中mirror和repository的区别

在Maven的setting中,我们常常会用到mirror和repository配置,其中mirror是镜像的意思,而repository则是仓库的意思,它们两者都可以改变maven下载项目以来jar包的地址。

仓库(repository)

repository就是个仓库,maven里有两种仓库,本地仓库和远程仓库。远程仓库相当于公共的仓库,大家都能看到。本地仓库是你本地的缓存副本,只有你看的到,主要起缓存作用。当你向仓库请求插件或依赖的时候,会先检查本地仓库里是否有。如果有则直接返回,否则会向远程仓库请求,并被缓存到本地仓库。远程仓库既可以在setting.xml中配置也可以在工程的pom.xml文件里指定。

镜像(mirror)

当maven需要到的依赖jar包不在本地仓库时,就需要到远程仓库下载,这个时候如果maven的setting.xml中配置了镜像,而且镜像配置的规则中匹配到目标仓库时,maven就直接去镜像中配置的仓库地址进行依赖jar的下载,而不会去其他的地方进行下载,简单而言,mirror可以拦截对远程仓库的请求,改变对目标仓库的下载地址。

mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径。比如,上班的时候在公司,用电信的网络,连的是电信的仓库。回到家后,是网通的网络,我想连网通的仓库,就可以通过mirror配置,统一把我工程里的仓库地址都改成网通的,而不用到具体工程配置文件里一个一个地改地址。下面举个例子:

复制代码
<mirrors>
    <mirror>
        <!-- 镜像id(多个镜像不能重复) -->
        <id>UK</id>
        <!-- 镜像名称 -->
        <name>UK Central</name>
        <!-- 镜像仓库地址 -->
        <url>http://uk.maven.org/maven2</url>
        <!-- 拦截规则 -->
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

通过上面的配置,就会给id为central的远程仓库做了个镜像。以后向central这个仓库发的请求都会发http://uk.maven.org/maven2而不是http://repo1.maven.org/maven2了。

镜像拦截规则

为了满足一些复杂的需求,Maven提供了一些镜像拦截规则的配置,如下所示:

复制代码
<mirrorOf>*</mirrorOf>
匹配所有远程仓库。
 
<mirrorOf>external:*</mirrorOf>
匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。
 
<mirrorOf>repo1,repo2</mirrorOf>
匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。
 
<mirrorOf>*,!repo1</miiroOf>
匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。
 
需要注意的是,由于镜像仓库完全屏蔽了其他同类的镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven由于无法访问其他同类的镜像仓库,因而将无法下载构件。
相关推荐
程序员雷欧11 分钟前
ThreadPoolExecutor 深度解析:从核心参数到源码实现的全面剖析
java·开发语言·jvm
谢尔登20 分钟前
分享一些我常用的Skill
java·人工智能·python·actionscript
AaronJonah40 分钟前
企业级线程池 traceId 闭环:上下文传递与全链路追踪实战
java·线程池·traceid跨线程传递
程序员黑豆1 小时前
Java入门第一步:从零开始编写你的第一个Hello World程序
java·前端·ai编程
Jazz_z2 小时前
如何用Python将彩色PDF一键转为黑白(灰度)
java·python·pdf
青山木2 小时前
Hot 100 --- 在排序数组中查找元素的第一个和最后一个位置
java·数据结构·算法·leetcode
天空之外1362 小时前
Docker安装MySQL 8.4 LTS、Docker安装Redis 7.4.x、Docker安装MinIO
java·mysql·docker
fīɡЙtīиɡ ℡2 小时前
深入学习JAVA并发编程(上)
java·开发语言·学习
XS0301063 小时前
Spring AI:两种内置 Advisor 快速实现 RAG
java·人工智能·spring
mifengxing3 小时前
LeetCode 238 除自身以外数组的乘积|无除法O(n)时间+O(1)空间双解法
java·算法·leetcode