一、相关概念解析

Maven的settings.xml文件里面有proxy、server、repository、mirror的配置,在配置仓库地址的时候容易混淆。

  1. proxy是服务器不能直接访问外网时需要设置的代理服务,不常用。

    • 就是VPN中的代理。网络被墙时可以使用这个配置处理。
  2. server是服务器要打包上传到私服时,设置私服的鉴权信息的地方。
    • 一般为企业私服的鉴权信息。
    • 它一般通过ID和repository进行匹配。比如某个私有仓库需要用户认证信息,可以在此处配置。
  3. repository是服务器下载jar包的地址。
    • 存储jar包的地址。从这个地址下载jar包。
    • 可以配置多个,每个repository都有一个唯一ID。理论上,ID是随意的,不过ID为central的repository是特殊的repository。
    • 如果我们不配置任何repository,那么maven默认会生成一个id为central的repository供自身使用。
    • Maven在进行jar包下载时从配置的所有repository中逐一查找。如果所有的repository都找不到,那么会提示异常。
  4. mirror是用于覆盖repository的镜像地址。此时我们下载jar包时如果需要从这个repository下载。那么实际上maven会从此repository对应的mirror对应的地址下载jar包。可以理解为mirror地址会覆盖它对应的repository地址,从而改变jar包的下载地址,这也是各种maven镜像站点的工作原理。(repository和mirror的对应是通过它们的ID进行匹配的)。

二、mirror和repository匹配逻辑

mirror和repository如何匹配规则如下。

  1. 全等匹配。如果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>
  1. 通配符匹配。“*”可以匹配所有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>
  1. 外部匹配。使用“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>
  1. 外部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”是指:
      1. URL中host部分是“localhost”的URL。
      2. URL中host部分是“127.0.0.1”的URL。
      3. URL中protocol部分是“file”的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>
  1. 取反匹配。使用“!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的配置。

  1. 插件仓库的配置和repository的配置一致。且mirror也会拦截(或者说是“镜像”)匹配的插件仓库的jar包下载请求。所以这里不做特别解释。

一些问题。

  1. 开发时曾遇到某个版本的依赖的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包下载逻辑相关推荐

  1. IDEA中maven配置解决jar包下载报错,亲测好用

    折磨了我很久的世纪难题,在网上找了大堆方法都不能完美解决,最后东拼西凑,maven配置实现光速构建.我使用的idea版本是2021.2.3,JDK是1.8.0_201,maven版本是3.6.3. 因 ...

  2. Maven远程仓库:pom依赖以及jar包下载

    Maven远程仓库:pom依赖xml配置以及jar包下载: 地址1: http://mvnrepository.com/ 地址2: http://172.16.163.52:8081/nexus/#w ...

  3. 2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决

    文章目录 1.maven下载 2.maven环境变量的配置 3.查看maven是否配置成功 4.配置文件的修改 5.IDEA集成maven 6.导入项目时jar包下载不成功的问题解决 maven教程: ...

  4. web静态资源访问规则||webjars的访问配置——webjars是maven库里面对css js image打的一个jar包

    Html css js image  txt   web项目中 放在 Webapp 在springboot项目中  静态资源放置的位置 Springboot默认的静态资源目录 (1)在src/main ...

  5. maven 加入第三方库_maven 手动添加第三方的jar包

    maven项目手动引入第三方jar包项目打包 项目有时候需要依赖第三方jar包,一般会去maven仓库寻找坐标,但有时候maven仓库并没有提供,我们需要手动下载jar包并导入项目. maven库中并 ...

  6. idea maven 打包报错问题、jar包下载慢或者失败爆红、plugins爆红等配置问题

    学习并使用maven有一段时间了,就想把一路上关于maven的问题总结一下. gay洛特镇楼 首先一定要配置好maven的环境变量,cmd打开输入mvn -v确认一下,具体配置这里就不说了,这是基操. ...

  7. Maven依赖的Scope去除部署不需要的jar 包(打包)

    2019独角兽企业重金招聘Python工程师标准>>> Maven依赖的Scope去除部署不需要的jar 包(打包) 博客分类: java maven <dependency& ...

  8. idea maven 仓库 jar 包下载不来下解决方案

    每次换一个新的环境写代码的时候,用 idea下载 maven 依赖 jar 包都是我无法言语的痛 像这样 或者是这样 maven总是能找到各种 jar 包让你下载不下来 经过无数次痛苦的尝试之后,终于 ...

  9. 解决maven打包打不进lib下的第三方jar包问题

    解决maven打包打不进lib下的第三方jar包问题 参考文章: (1)解决maven打包打不进lib下的第三方jar包问题 (2)https://www.cnblogs.com/lmj612/p/1 ...

最新文章

  1. 检验Xcode是否被改动过的简单方法,不妨试试!!!
  2. 李沐团队提出最强ResNet改进版,多项任务达到SOTA | 已开源
  3. 知识图谱论文阅读(二十三)【SIGIR2020】Multi-behavior Recommendation with Graph Convolutional Networks
  4. statistic在c语言中的作用,模型评价除了C-statistic,还能用什么指标?
  5. CCF NOI1046 打印方阵
  6. 伪静态在webconfig中配置
  7. multipartfile上传文件_Feign文件上传和部分源码解读
  8. 【水果识别】基于matalb GUI水果分类系统【含Matlab源码 174期】
  9. Android 极光各厂商配置
  10. 电路与电子技术课程设计报告(正弦、方波-三角波、可调矩形波、可调锯齿波发生器)
  11. (运存扩展器)Android手机内存扩展软件RAMEXPANDER使用教程
  12. [机器学习入门] 李宏毅机器学习笔记-21(Transfer Learning part 1 ; 迁移学习 part 1)
  13. 前后端报文传输加密方案
  14. android 专业密码键盘,Android仿支付宝、京东的密码键盘和输入框
  15. chr 13 java 替换_Java ROT13编码转换算法实现
  16. 高考计算机会考等级划分标准,学考等级怎么划分标准2021
  17. 硬件学习(三)电阻作用
  18. 带你玩转Github
  19. $.ajax异步请求总结
  20. DOM节点类型及其属性和方法

热门文章

  1. 爱做梦的人工智能「Stabled Diffusion」
  2. Maemo Linux手机平台分析系列:3 安装Maemo平台宿主Linux系统
  3. 机器学习树叶分类与聚类
  4. 电路硬件设计基础(Altium designer的基本使用及一些板子制作流程)20220113
  5. seo优化-SEO实战密码—60天网站流量提高20倍
  6. 面试的时候问:你的期望薪资多少?怎么谈
  7. 服务器硬件及磁盘阵列
  8. 【PP-19】定义成本核算变式
  9. 火凤凰Phoenix FD 2.2 重要参数介绍
  10. viper4android 6.0系统,VIPER4Android最新版本