Maven的mirror、repository、server和proxy配置以及jar包下载逻辑

一、相关概念解析

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>

<
  • 11
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值