详解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 分钟前
IDEA启动后控制台不报错,但是页面访问404
java·intellij-idea·mybatis
二哈喇子!2 分钟前
Tomcat下载安装以及配置(详细教程)
java·tomcat·intellij-idea
计算机毕设指导64 分钟前
基于微信小程序的健康管理系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·intellij-idea
月月玩代码13 分钟前
OkHttp,Square出品的Java/Android HTTP客户端!
android·java·okhttp
胡八一15 分钟前
IntelliJ IDEA 配置插件目录
java·ide·intellij-idea
资生算法程序员_畅想家_剑魔19 分钟前
Java常见技术分享-分布式篇-SpringCloud-01-基础组件
java·分布式·spring cloud
信码由缰21 分钟前
SJF4J 五分钟入门:Java 的实用 JSON 门面
java·python·json
那我掉的头发算什么23 分钟前
【SpringBoot】从学会使用maven开始
spring boot·后端·spring·maven
yi诺千金24 分钟前
Android U 自由窗口(浮窗)——操作栏相关
android·java·ui
紫小米25 分钟前
Function calling实践
java·前端·数据库