maven关于pom中设置repository不起作用的原因排查

自己在使用maven构建应用时,发现有一些包始终无法下载下来,后来看到该jar包一直从自己的私服上进行下载,而私服配置的是中央仓库的地址,这些包属于较偏门的,所以在中央仓库中无法找到。所以在pom中加上了自定义的repository,但再进行maven构建时,还是始终从私服地址进行下载。

问题排查

自己的maven的setting文件中关于私服镜像的配置:

   <mirror>
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://172.xx.xx.xx:8081/repository/maven-public/</url>
    </mirror>

通过查询得知,问题就出现在这个mirrorOf标签结点上。链接

当maven需要到的依赖jar包不在本地仓库时, 就需要到远程仓库下载 .
这个时候如果mavensetting.xml中配置了镜像 , 而且镜像配置的规则中匹配到目标仓库时 ,
maven认为目标仓库被镜像了, 不会再去被镜像仓库下载依赖jar包, 而是直接去镜像仓库下载.

简单而言, 当通过pom文件指定的repository去下载镜像时,mirror首先通过repository的id拦截对远程仓库的请求 , 改变对目标仓库的下载地址,因为自己在这里指定的mirrorOf为*,那么所有的repository都会被该mirror拦截,从而替换成了自己的私服镜像

为了满足一些复杂的需求,Maven还支持更高级的镜像配置:

1.*

匹配所有远程仓库。

2.external:*

匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。

3.repo1,repo2

匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。

4.*,!repo1

匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。

解决方案
   <mirror>
      <id>nexus</id>
      <mirrorOf>*,!pom中reposiretory的Id</mirrorOf>
      <url>http://172.xx.xx.xx:8081/repository/maven-public/</url>
    </mirror>

意思时除了pom指定的reposiretory外所有的reposiretory都跳转到该镜像下。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值