Maven无法拉取本地已有依赖
2022-12-01 本文已影响0人
Nzkalhbxx
当使用Idea或者其他开发工具使用maven获取依赖时,有时会发现明明本地存在的依赖,maven却自动去远程仓库中拉取?且此时远程仓库不可用(内网或私服宕机),那么项目就直接拉取依赖失败,导致无法正常开发。
此时可能的场景是:
本地的依赖是直接通过拷贝而来,而不是本地原生通过从配置的远程仓库中拉取而得。那么此时依赖的坐标中,应该会存在一个_remote.repositories文件,用于描述当前的jar是从哪个远程仓库(或者镜像)获取的。
如果maven的settings.xml文件中配置了远程仓库(或者镜像),且生效的仓库的id(或镜像id)跟_remote.repositories中记录的不一样时,此时maven会认为本地存在的这个依赖不是自己需要的,那么就会默认从指定的远程仓库(或镜像)中去拉取需要的依赖。
所以就会发生明明本地有这个依赖,但是导包时却发现maven还是去远程仓库(或镜像)去拉取依赖。当远程仓库(或镜像)不可用时,maven直接报错。
解决的方法是:
进去本地仓库目录
删除本地仓库下的所有_remote.repositories文件,可以使用命令执行批量删除
Windows:
for /r %i in (*.repositories) do del %i
删除本地仓库目录下所有的.lastUpdated文件
for /r %i in (*.lastUpdated) do del %i
Linux:
find . -name "*.lastUpdated" | xargs rm -rf
find . -name "*repositories" | xargs rm -rf
然后再重新执行导入依赖,如果修改了settings.xml文件,建议重启idea或者重新选择一下maven的配置文件,点击应用再更新回去。因为idea可能会缓存settings.xml的内容。
注意:如果settings.xml中配置了多个mirror镜像,且每个镜像的mirrorOf都是*(即表示该镜像代理了所有repositories,所有的拉取请求都会通过这个镜像去获取),那么只有第一个mirror会生效,后面的直接忽略(即使第一个镜像mirror不可用的状态下)