一、问题描述:maven加载依赖报错
点击刷新,加载所有maven项目的时候,maven加载依赖失败。
显示“无法解析mysql:mysql-connector-java:pom:8.0.27”,具体报错原因如下:
mysql:mysql-connector-java:pom:8.0.27 failed to transfer from https://maven.aliyun.com/repository/public during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of nexus has elapsed or updates are forced. Original error: Could not transfer artifact mysql:mysql-connector-java:pom:8.0.27 from/to nexus (https://maven.aliyun.com/repository/public): transfer failed for https://maven.aliyun.com/repository/public/mysql/mysql-connector-java/8.0.27/mysql-connector-java-8.0.27.pom
尝试使用 -U 标记(强制更新快照)运行 Maven 导入
二、原因分析&&解决方法
mysql:mysql-connector-java:pom:8.0.27 failed to transfer from https://maven.aliyun.com/repository/public during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of nexus has elapsed or updates are forced. Original error: Could not transfer artifact mysql:mysql-connector-java:pom:8.0.27 from/to nexus (https://maven.aliyun.com/repository/public): transfer failed for https://maven.aliyun.com/repository/public/mysql/mysql-connector-java/8.0.27/mysql-connector-java-8.0.27.pom
将上述报错信息进行翻译:
Mysql: Mysql -connector-java:pom:8.0.27在前一次尝试中从https://maven.aliyun.com/repository/public传输失败。此失败缓存在本地存储库中,直到nexus的更新间隔已过或强制更新,才会重新尝试解析。原来的错误:无法传输工件mysql:mysql-connector-java:pom:8.0.27从/到nexus (https://maven.aliyun.com/repository/public):传输失败https://maven.aliyun.com/repository/public/mysql/mysql-connector-java/8.0.27/mysql-connector-java-8.0.27.pom
即此失败缓存在本地储存库中,直到nexus的更新间隔已过或强制更新,才会重新尝试解析。
1. 删除本地仓库中下载失败缓存的依赖
进入maven仓库中该依赖包的缓存文件夹,将里面的文件全部删除。
注:当我们拉取jar包失败的时候,本地库就会生成lastUpdated 文件。 拉取成功的使用可以在本地仓库中查看到jar包。
2. 然后将项目进行clean、compile、package、install
注:
1、package 命令执行时,会先从远程仓库下载最新 jar 包,在 reimport 无效时,可起到代替 reimport 的效果;
2、同理,使用 maven install 也可,但生成的 jar 包会同时到本地仓库;使用 maven deploy 也可,但生成的 jar 包会同时到远程仓库;
3、建议使用 package 命令,生成的 jar 包只保存在项目文件夹中,不影响仓库 jar 包;且更新完成之后,可执行 maven clean 命令清理掉刚才生成的 jar 包。
3. 重新加载maven
重新加载maven后,改依赖项还是报错,报错如下:
the trustAnchors parameter must be non-empty
翻译:trustAnchors参数必须非空
4. 在IDEA的Setting的Maven配置的VM options添加如下代码:
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true
由于使用了HTTPS,存在着SSL证书验证的问题,因此需要在IDEA中添加配置来忽略SSL证书的验证。
上述代码的作用是忽略SSL证书检查,下面的Importing是指导入依赖时忽略SSL证书检查,Runner是指运行Maven插件或目标时忽略SSL证书检查。
然后把仓库里缓存失败的文件删除,再刷新maven,依赖即可下载成功!
5. 一键用脚本删除maven仓库里所有的lastUpdated文件,然后刷新maven
一个一个删除maven仓库里下载失败的缓存文件太慢了,直接用脚本删除maven仓库里所有的lastUpdated文件。操作方法如下:
新建一个文件把名称后缀名改为clean.bat
@echo off
rem create by NettQun
rem 仓库路径
set REPOSITORY_PATH=D:\maven\apache-maven-3.8.4\repository
rem 搜索中
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
echo %%i
del /s /q "%%i"
)
rem 搜索完毕
pause
将上面的D:\maven\apache-maven-3.8.4\repository 改成你自己的仓库地址,保存退出,退出后双击运行即可。然后刷新maven,所有依赖都下载成功了!
三、另一种解决方法
1. 直接在Maven中央仓库搜索我们需要的jar包
Maven中央仓库地址:https://mvnrepository.com/
如我的不能被Maven识别的jar包:org.apache.zookeeper:zookeeper:pom:3.4.6
2. 点击需要的jar包名称进入版本库,下载对应版本
需要哪个版本,就点击对应版本
点击对应版本的包进入如下界面,点击pom/jar下载文件。
下载好后把这个文件复制到maven仓库中对应的目录下。
然后刷新maven,或者重启idea。