详解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由于无法访问其他同类的镜像仓库,因而将无法下载构件。
相关推荐
异常君2 分钟前
Java 高并发编程:等值判断的隐患与如何精确控制线程状态
java·后端·代码规范
异常君3 分钟前
Java 日期处理:SimpleDateFormat 线程安全问题及解决方案
java·后端·代码规范
都叫我大帅哥5 分钟前
Spring AI中的ChatClient:从入门到精通,一篇搞定!
java·spring·ai编程
都叫我大帅哥5 分钟前
《@SpringBootApplication:Spring Boot的"一键启动"按钮,还是程序员的"免死金牌"?》
java·后端·spring
triticale10 分钟前
P12167 [蓝桥杯 2025 省 C/Python A] 倒水
java·蓝桥杯
-曾牛26 分钟前
Spring AI 快速入门:从环境搭建到核心组件集成
java·人工智能·spring·ai·大模型·spring ai·开发环境搭建
啊松同学27 分钟前
【Mybatis】MyBatisPlus的saveBatch真的是批量插入吗?深度解析与性能优化
java·后端·性能优化·mybatis
烁3471 小时前
每日一题(小白)模拟娱乐篇33
java·开发语言·算法
北漂老男孩1 小时前
Java对象转换的多种实现方式
java·开发语言
小贾要学习1 小时前
【C++】继承----下篇
android·java·c++