现象:当我们从代码仓拉取新项目时,从该项目的开发同事拿到其maven的settings文件,作为项目的maven配置,为了是能找到工程中所依赖的包,能从远程仓下载下来。 然后本地仓的包,也从同事那边拷贝一份过来,直接运行mvn -install 会显示找不到xxxx包
1、本地我们也已经同步了有包,而且远程仓也是有的,为什么没办法从本地获取。 因为本地的包文件夹中有这个 _remote.repositories 文件。 这个文件存在的意思是, 本地 跟 远程仓库都必须同时存在这个jar包资源才行
而这里还有一个问题就是idea去跑settings文件时,找到主仓发现没有,就报错了,没去对应的仓库找,我们settings文件是配置了多个仓库,在位置配置的仓库地址就是其中一个,作为主仓,maven会优先从这个仓库去找包,如果没有那么就会从标签内的其他仓库依次去找 。而且加上idead的 Reload All Maven Project冲加载包功能,没有去挨个找仓库的小问题,有时候只会在mirror里面找,无法解释清楚,配置mirror主仓目的是加快下载包,而且这个主仓一般都包含多数依赖包
所以最好就是将这类文件都需要删除
解决方案:
直接通过更换本地仓库地址,重新创建一个新的空的本地文件做本地仓库地址、并执行 mvn clean package -U -s D:toolssettings.xml -gs D:toolssettings.xml 命令解决了下载包的问题。
报出了第二个问题,点击IDEA的 Reload All Maven Project 刷新按钮,就报错了
其实跟第一个问题是相关的:
可以切换了mirror的仓库地址,切换成实际存在的那个仓库地址,再重跑
归根结底,就是把本地仓清空,然后重新运行maven,把报错找不到的那个包所在仓库,改为mirror的主仓地址,再重跑就可以下载到依赖了
另外也有可能是idea的配置问题 ssl证书问题,参考下面帖子
- 如果都能正常打包了,必要的时候需要看看本地仓库是否已经下了该包,如果是有下载了,可以清空下idea缓存,重启后基本是就不会爆红了
- 如果部分依赖还未加载出来,同理还是去本地仓库看看是否已经下载了 ,如果是确实没有下载,比如maven插件包目录都没有下载到,那么就单独把该目录删除,然后再reload下工程项目
- 或者也可以适当情况 勾选这个离线工作状态,表示不去中央仓库找依赖包,有时下载不下来可能是网络等原因,我们可以手动去中央仓下载包,然后手动放到我们的本地仓库对应的路径,勾选离线工作状态下,maven就不会去远程仓找依赖,就会在本地仓找