栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

maven仓库拉取失败问题总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

maven仓库拉取失败问题总结

1 前言

sfbizcore依赖了nfcore-facade包,但是sfbizcore中的一个方法在nfcore-facade本地包中没有找到,导致编译失败。本地删除依赖的nfcore-facade后重新拉取依旧有问题。查看mvn-test环境的nfcore-facade包,发现是包是完整的,mvn-dev环境包是有问题的,所以问题在于为什么maven优先拉取了mvn-dev环境包。

2解决过程

1、删除本地nfcore-facade后重新拉取依赖。发现新拉取的包依旧还是原来的包。

2、查看生产环境(mvn-test)的maven仓库,下载源码包发现代码是完整的;查看开发环境(mvn-dev)的maven仓库,下载源码包发现代码是不完整的。所以本地maven拉取的是dev的包,而没有拉到test的包。

3、根据pom中的mvn配置的仓库来看,正常应该是先拉取的test环境的包,找不到的情况再拉取dev环境的包,说明maven没有使用pom文件中配置的仓库地址。


  dev
  
    dev
  
  
  
    true
  
  
    
      aistarfish-release
      http://mvn-test.aistarfish.net/nexus/content/groups/aistarfish-release/
      
    
    
      aistarfish-dev
      http://mvn-dev.aistarfish.net/nexus/content/groups/aistarfish-dev/
      
      
    
  

4、查看idea本地的maven配置,使用的是自己配置的maven和settings文件

查看本地settings文件的配置,其他配置没有问题,基本上都被注释掉了,只有mirrors这个标签需要注意一下。

  
    
    
        aistarfish-test
        central
        aistarfish-test
        http://mvn-test.aistarfish.net/nexus/content/groups/aistarfish-release/
    
      
        aistarfish-dev
        *
        aistarfish-dev
        http://mvn-dev.aistarfish.net/nexus/content/groups/aistarfish-dev
    
  

5、尝试修改该mirror的配置:aistarfish-test的mirrorOf标签从central改为*

  
    
    
        aistarfish-test
        *
        aistarfish-test
        http://mvn-test.aistarfish.net/nexus/content/groups/aistarfish-release/
    
      
        aistarfish-dev
        *
        aistarfish-dev
        http://mvn-dev.aistarfish.net/nexus/content/groups/aistarfish-dev
    
  

 6、重新拉取包之后发现包是完整的了,问题解决。

原因

1、idea设置了自定义的maven配置和settings文件
2、settings文件中aistarfish-test的mirrorOf使用了默认值central
3、maven仓库的dev包和test包不一致,dev仓库的包不是最新的

问题总结

maven获取真正起作用的repository集合流程:首先会获取pom.xml里的repository集合,然后在settings.xml里找mirrors元素,如果repository的id和mirror的mirrorOf的值相同,则该mirror替代该repository,如果该repository找不到对应的mirror,则使用其本身,依此可以得到最终起作用的repository集合,repositories中默认包含了中央仓库central,当然也可以重新它的url;可以理解mirror是复写了对应id的repository。

在这个问题中,因为pom文件中id为"aistarfish-release"的仓库在settings文件中匹配到了“aistarfish-dev”的mirrorOf值(aistarfish-dev使用的是*,而aistarfish-test使用的是central),所以最后使用了dev环境的maven仓库,当把aistarfish-test的mirrorOf修改为*之后,能够被"aistarfish-release"匹配到所以生效了。(如果多个配置都能匹配成功,则优先匹配第一个)

所以当我把settings文件中的“aistarfish-dev”的mirrofOf也改成central,这时候pom中的"aistarfish-release"仓库既没有匹配到aistarfish-test,也没有匹配到aistarfish-dev,所以最后使用自己的仓库地址,也可以拉到正确的包。

  • 没有配置mirrors的情况
  • 配置了mirrors的情况

问题规避

可以从以下几方面规避这个问题
1、使用idea自带的maven插件和settings文件
2、如果使用了自定义的setting文件,mirrors标签不要进行配置
3、如果使用了自定义的setting文件,mirrors标签使用的镜像mirrorOf要与pom文件中的仓库地址匹配,可以直接配成* 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631329.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号