Maven的mirror、repository、server和proxy配置以及jar包下载逻辑
一、相关概念解析
Maven的settings.xml文件里面有proxy、server、repository、mirror的配置,在配置仓库地址的时候容易混淆。
- proxy是服务器不能直接访问外网时需要设置的代理服务,不常用。
- 就是VPN中的代理。网络被墙时可以使用这个配置处理。
- server是服务器要打包上传到私服时,设置私服的鉴权信息的地方。
- 一般为企业私服的鉴权信息。
- 它一般通过ID和repository进行匹配。比如某个私有仓库需要用户认证信息,可以在此处配置。
- repository是服务器下载jar包的地址。
- 存储jar包的地址。从这个地址下载jar包。
- 可以配置多个,每个repository都有一个唯一ID。理论上,ID是随意的,不过ID为central的repository是特殊的repository。
- 如果我们不配置任何repository,那么maven默认会生成一个id为central的repository供自身使用。
- Maven在进行jar包下载时从配置的所有repository中逐一查找。如果所有的repository都找不到,那么会提示异常。
- mirror是用于覆盖repository的镜像地址。此时我们下载jar包时如果需要从这个repository下载。那么实际上maven会从此repository对应的mirror对应的地址下载jar包。可以理解为mirror地址会覆盖它对应的repository地址,从而改变jar包的下载地址,这也是各种maven镜像站点的工作原理。(repository和mirror的对应是通过它们的ID进行匹配的)。
二、mirror和repository匹配逻辑
mirror和repository如何匹配规则如下。
- 全等匹配。如果mirror的mirrorOf的值和repository的ID完全一致,则这个mirror和repository匹配。不过mirrorOf通常可以配置多个值,使用逗号分隔。如下配置,当我们需要从aliyun或者google这两个仓库下载jar时,maven会直接从ALiYunMirror这个mirror下载。即从 https://maven.aliyun.com/repository/public 这个地址进行下载。
<mirror><id>ALiYunMirror</id><mirrorOf>aliyun,google</mirrorOf><name>Nexus aliyun</name><url>https://maven.aliyun.com/repository/public</url>
</mirror><repository><id>aliyun</id><url>https://maven.aliyun.com/repository/central</url>
</repository><repository><id>google</id><url>https://maven.aliyun.com/repository/google</url>
</repository>
- 通配符匹配。“*”可以匹配所有repository。如下所示,当需要从aliyun或者google下载jar包时下载的地址都会重定向到ALiYunMirror配置的地址上。
<mirror><id>ALiYunMirror</id><mirrorOf>*</mirrorOf><name>Nexus aliyun</name><url>https://maven.aliyun.com/repository/public</url>
</mirror><repository><id>aliyun</id><url>https://maven.aliyun.com/repository/central</url>
</repository><repository><id>google</id><url>https://maven.aliyun.com/repository/google</url>
</repository>
- 外部匹配。使用“external:*”对repository进行匹配。它匹配“不在本地主机上且不基于文件的所有内容”的repository配置。如下所示,当需要从aliyun或者google下载jar包时下载的地址都会重定向到ALiYunMirror配置的地址上。而不会重定向local或者local-http的下载请求。
1. URL中host部分是“localhost”的不匹配。
2. URL中host部分是“127.0.0.1”的不匹配。
3. URL中protocol部分是“file”的不匹配。
4. 其他都匹配。
<mirror><id>ALiYunMirror</id><mirrorOf>external:*</mirrorOf><name>Nexus aliyun</name><url>https://maven.aliyun.com/repository/public</url>
</mirror><repository><id>aliyun</id><url>https://maven.aliyun.com/repository/central</url>
</repository><repository><id>google</id><url>https://maven.aliyun.com/repository/google</url>
</repository><repository><id>local</id><url>file:///root/m2/</url>
</repository><repository><id>local-http</id><url>http://localhost:8080/m2/</url>
</repository>
- 外部http匹配。使用“external:http:*”对repository进行匹配。它匹配“http相关协议”的repository配置。如下所示,当需要从http-repo和http-dav下载jar包时下载的地址都会重定向到ALiYunMirror配置的地址上。而不会重定向aliyun、google、local或者local-http的下载请求。
- URL中protocol部分是“http”、“dav”、“dav:http”或“dav+http”且不是“本地URL”的 匹配。
- “本地URL”是指:
- URL中host部分是“localhost”的URL。
- URL中host部分是“127.0.0.1”的URL。
- URL中protocol部分是“file”的URL。
- 其他都不匹配。
- URL中protocol部分是“http”、“dav”、“dav:http”或“dav+http”且不是“本地URL”的 匹配。
<mirror><id>ALiYunMirror</id><mirrorOf>external:*</mirrorOf><name>Nexus aliyun</name><url>https://maven.aliyun.com/repository/public</url>
</mirror><repository><id>aliyun</id><url>https://maven.aliyun.com/repository/central</url>
</repository><repository><id>google</id><url>https://maven.aliyun.com/repository/google</url>
</repository><repository><id>local</id><url>file:///root/m2/</url>
</repository><repository><id>local-http</id><url>http://localhost:8080/m2/</url>
</repository><repository><id>http-repo</id><url>http://maven456.com:8080/m2/</url>
</repository><repository><id>http-dav</id><url>dav:http://maven123.com:8080/m2/</url>
</repository>
- 取反匹配。使用“!repo”对repository进行匹配。它表示不匹配以“repo”为ID的repository。如下所示,当需要从aliyun、local、http-repo、local-http和http-dav下载jar包时下载的地址都会重定向到ALiYunMirror配置的地址上。而不会重定向google的下载请求。
<mirror><id>ALiYunMirror</id><mirrorOf>*,!google</mirrorOf><name>Nexus aliyun</name><url>https://maven.aliyun.com/repository/public</url>
</mirror><repository><id>aliyun</id><url>https://maven.aliyun.com/repository/central</url>
</repository><repository><id>google</id><url>https://maven.aliyun.com/repository/google</url>
</repository><repository><id>local</id><url>file:///root/m2/</url>
</repository><repository><id>local-http</id><url>http://localhost:8080/m2/</url>
</repository><repository><id>http-repo</id><url>http://maven456.com:8080/m2/</url>
</repository><repository><id>http-dav</id><url>dav:http://maven123.com:8080/m2/</url></repository>
插件仓库pluginRepositories的配置。
- 插件仓库的配置和repository的配置一致。且mirror也会拦截(或者说是“镜像”)匹配的插件仓库的jar包下载请求。所以这里不做特别解释。
一些问题。
- 开发时曾遇到某个版本的依赖的jar包和pom不在同一个仓库的情况。因此这个版本的依赖想要完整下载必须将jar包所在的仓库和pom所在的仓库都进行配置才可以(当然正常情况下不会发生这种情况,一些私有仓库的可能有这种情况)。
三、图示Jar包(或者pom)下载情况
1.【Maven:无mirror配置下的jar包(或者pom)下载逻辑】
Maven配置参考:
<repository><id>repo1</id><url>http://mv.com/m1/</url>
</repository>
<repository><id>repo2</id><url>http://mv.com/m2/</url>
</repository>
<repository><id>repo3</id><url>http://mv.com/m3/</url>
</repository>
2. 【Maven:有mirror配置下的jar包(或者pom)下载逻辑】
Maven配置参考:
<mirror><id>ALiYunMaven</id><mirrorOf>*</mirrorOf><name>Nexus aliyun</name><url>https://maven.aliyun.com/repository/public</url>
</mirror><repository><id>repo1</id><url>http://mv.com/m1/</url>
</repository>
<repository><id>repo2</id><url>http://mv.com/m2/</url>
</repository>
<repository><id>repo3</id><url>http://mv.com/m3/</url>
</repository>
3. 【Maven:有mirror和server配置下的jar包(或者pom)下载逻辑】
Maven配置参考:
<server><id>repo1</id><username>repouser1</username><password>repopwd1</password>
</server>
<server><id>repo2</id><username>repouser2</username><password>repopwd2</password>
</server>
<server><id>repo3</id><username>repouser3</username><password>repopwd3</password>
</server>
<mirror><id>ALiYunMaven</id><mirrorOf>repo1,repo2</mirrorOf><name>Nexus aliyun</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>
<repository><id>repo1</id><url>http://mv.com/m1/</url>
</repository>
<repository><id>repo2</id><url>http://mv.com/m2/</url>
</repository>
<repository><id>repo3</id><url>http://mv.com/m3/</url>
</repository>
4. 【Maven:有mirror、proxy和server配置下的jar包(或者pom)下载逻辑】
Maven配置参考:
<proxy><id>optional</id><active>true</active><protocol>http</protocol><username>proxyuser</username><password>proxypass</password><host>proxy.host.net</host><port>80</port><nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
<server><id>repo1</id><username>repouser1</username><password>repopwd1</password>
</server>
<server><id>repo2</id><username>repouser2</username><password>repopwd2</password>
</server>
<server><id>repo3</id><username>repouser3</username><password>repopwd3</password>
</server>
<mirror><id>ALiYunMaven</id><mirrorOf>repo1,repo2</mirrorOf><name>Nexus aliyun</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>
<repository><id>repo1</id><url>http://mv.com/m1/</url>
</repository>
<repository><id>repo2</id><url>http://mv.com/m2/</url>
</repository>
<repository><id>repo3</id><url>http://mv.com/m3/</url>
</repository>
Maven的mirror、repository、server和proxy配置以及jar包下载逻辑相关推荐
- IDEA中maven配置解决jar包下载报错,亲测好用
折磨了我很久的世纪难题,在网上找了大堆方法都不能完美解决,最后东拼西凑,maven配置实现光速构建.我使用的idea版本是2021.2.3,JDK是1.8.0_201,maven版本是3.6.3. 因 ...
- Maven远程仓库:pom依赖以及jar包下载
Maven远程仓库:pom依赖xml配置以及jar包下载: 地址1: http://mvnrepository.com/ 地址2: http://172.16.163.52:8081/nexus/#w ...
- 2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
文章目录 1.maven下载 2.maven环境变量的配置 3.查看maven是否配置成功 4.配置文件的修改 5.IDEA集成maven 6.导入项目时jar包下载不成功的问题解决 maven教程: ...
- web静态资源访问规则||webjars的访问配置——webjars是maven库里面对css js image打的一个jar包
Html css js image txt web项目中 放在 Webapp 在springboot项目中 静态资源放置的位置 Springboot默认的静态资源目录 (1)在src/main ...
- maven 加入第三方库_maven 手动添加第三方的jar包
maven项目手动引入第三方jar包项目打包 项目有时候需要依赖第三方jar包,一般会去maven仓库寻找坐标,但有时候maven仓库并没有提供,我们需要手动下载jar包并导入项目. maven库中并 ...
- idea maven 打包报错问题、jar包下载慢或者失败爆红、plugins爆红等配置问题
学习并使用maven有一段时间了,就想把一路上关于maven的问题总结一下. gay洛特镇楼 首先一定要配置好maven的环境变量,cmd打开输入mvn -v确认一下,具体配置这里就不说了,这是基操. ...
- Maven依赖的Scope去除部署不需要的jar 包(打包)
2019独角兽企业重金招聘Python工程师标准>>> Maven依赖的Scope去除部署不需要的jar 包(打包) 博客分类: java maven <dependency& ...
- idea maven 仓库 jar 包下载不来下解决方案
每次换一个新的环境写代码的时候,用 idea下载 maven 依赖 jar 包都是我无法言语的痛 像这样 或者是这样 maven总是能找到各种 jar 包让你下载不下来 经过无数次痛苦的尝试之后,终于 ...
- 解决maven打包打不进lib下的第三方jar包问题
解决maven打包打不进lib下的第三方jar包问题 参考文章: (1)解决maven打包打不进lib下的第三方jar包问题 (2)https://www.cnblogs.com/lmj612/p/1 ...
最新文章
- 检验Xcode是否被改动过的简单方法,不妨试试!!!
- 李沐团队提出最强ResNet改进版,多项任务达到SOTA | 已开源
- 知识图谱论文阅读(二十三)【SIGIR2020】Multi-behavior Recommendation with Graph Convolutional Networks
- statistic在c语言中的作用,模型评价除了C-statistic,还能用什么指标?
- CCF NOI1046 打印方阵
- 伪静态在webconfig中配置
- multipartfile上传文件_Feign文件上传和部分源码解读
- 【水果识别】基于matalb GUI水果分类系统【含Matlab源码 174期】
- Android 极光各厂商配置
- 电路与电子技术课程设计报告(正弦、方波-三角波、可调矩形波、可调锯齿波发生器)
- (运存扩展器)Android手机内存扩展软件RAMEXPANDER使用教程
- [机器学习入门] 李宏毅机器学习笔记-21(Transfer Learning part 1 ; 迁移学习 part 1)
- 前后端报文传输加密方案
- android 专业密码键盘,Android仿支付宝、京东的密码键盘和输入框
- chr 13 java 替换_Java ROT13编码转换算法实现
- 高考计算机会考等级划分标准,学考等级怎么划分标准2021
- 硬件学习(三)电阻作用
- 带你玩转Github
- $.ajax异步请求总结
- DOM节点类型及其属性和方法