详解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由于无法访问其他同类的镜像仓库,因而将无法下载构件。
相关推荐
Uncommon.7 分钟前
Spring IOC如何解决循环依赖的问题?
java·后端·spring
Nijika...14 分钟前
RabbitMQ三种交换机的基本使用方法
java·后端·spring·rabbitmq
Dyan_csdn24 分钟前
【JAVA项目】基于ssm的【二手车交易系统】
java·开发语言
IT 小舟24 分钟前
Java:基于SSM的高校食堂系统
java·开发语言
虎哥和你一起学编程1 小时前
redis stream轻量级消息队列
java·redis·github
百块富翁1 小时前
实现SpringBoot项目嵌入其他项目
java·spring boot·后端·maven
七折困1 小时前
Spring Boot 3.X:Unable to connect to Redis错误记录
java·spring boot·后端
coding侠客1 小时前
一分钟上手:如何创建你的第一个 Spring Boot Starter
java·spring boot·后端·starter
重生之Java开发工程师1 小时前
RabbitMQ基本使用以及整合Java项目
java·rabbitmq·java-rabbitmq
程序员_唯爱永恒1 小时前
【Srping Boot3】寻找请求里的InputStream
java·spring boot·spring·servlet·filter