今天写demo创建SpringBoot项目的时候出现了问题,发现是我的maven有问题,是因为我maven配置的是公司的私服,SpringBoot需要的依赖私服没有直接依赖(私服进行了封装),所以拿不到依赖,我就想配置多个mirror来解决该问题,想法是好的,就是不太行,具体原因请看下文。
虽然 mirrors 可以配置多个子节点,但是它只会使用其中的一个节点,即 默认情况下配置多个 mirror 的情况下,只有第一个生效,只有当前一个 mirror 无法连接的时候,才会去找后一个;而我们想要的效果是:当a.jar在第一个 mirror 中不存在的时候,maven会去第二个 mirror 中查询下载,但是maven不会这样做!
针对这个问题我所知道的就两种解决方案。
方案一
- 修改maven配置,公司项目用公司提供的私服,个人项目用aliyun或者其他的镜像。
方案二
我们知道 settings.xml 中可以使用变量,可以尝试使用变量解决。
<mirrors>
<mirror>
<id>aliyun</id>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>${aliyun}</mirrorOf>
</mirror>
<mirror>
<id>netease</id>
<url>http://mirrors.163.com/maven/repository/maven-public/</url>
<mirrorOf>${netease}</mirrorOf>
</mirror>
<mirror>
<id>default</id>
<url>http://192.168.0.100/nexus/repository/maven-public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
我们知道,默认情况下配置多个 mirror 的情况下,只有第一个生效。那么我们可以将最后一个作为默认值,前面配置的使用环境变量动态切换。
-
默认情况下,执行:
mvn help:effective-settings可以看到使用的是私服。 -
如果希望使用阿里云镜像,如下执行:
mvn help-effective-settings -Daliyun=central。 -
同样的道理,使用网易镜像,则执行:
mvn help:effective-settings -Dnetease=central,测试无误。
如果在eclipse中,需要修改运行脚本的参数。
方案二我还没试过,如果大家在使用方案二的过程中出现问题可以找小编我一起讨论。
在配置了多个Maven mirror时,发现只有第一个生效。本文探讨了该问题,并提出了两种解决方案:方案一是根据项目需求切换不同mirror,方案二是通过设置环境变量动态选择mirror,以实现按需下载依赖。
8942





