执行mvn clean install遇依赖解析失败,排查代理等仍未解决
先把你遇到的错误信息明确出来,方便针对性排查:
[ERROR] Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target -> [Help]
这个PKIX路径错误我之前也踩过几次坑,虽然你已经做了代理、镜像和证书的基础配置,但还有几个容易忽略的点可以排查:
1. 确认证书真的导入到了Maven使用的JDK信任库
很多时候我们会把证书导入到系统默认JRE,但Maven可能用的是另一个JDK的信任库。先查清楚Maven依赖的JDK:
mvn -version
输出里会显示Java version和Java home,比如Java home: /usr/lib/jvm/java-11-openjdk-amd64/jre。
然后检查这个JDK的cacerts里是否包含中央仓库(或代理)的证书:
keytool -list -keystore <你的Java home路径>/lib/security/cacerts -alias maven-central
默认密码是changeit。如果提示“找不到别名”,说明证书没导入成功,重新执行导入命令:
keytool -importcert -file <你的证书文件路径>.crt -keystore <你的Java home路径>/lib/security/cacerts -alias maven-central
输入密码后确认“是否信任此证书”,输入y即可。
2. 检查Maven Settings里的配置是否冲突
打开你的settings.xml(通常在~/.m2/settings.xml或MAVEN_HOME/conf/settings.xml),检查:
- 如果配置了
<server>标签,有没有指定自定义trustStore?如果有,要确认这个信任库包含了所需证书,否则可以暂时注释掉这个配置,让Maven用JVM默认的信任库。示例冲突配置:
<servers> <server> <id>central</id> <trustStore>/custom/path/truststore.jks</trustStore> <trustStorePassword>custom-pass</trustStorePassword> </server> </servers>
- 代理配置是否正确?如果用了公司代理,要确保代理地址、端口、认证信息都没错,而且代理的根证书已经导入到信任库。
3. 清理本地Maven仓库的缓存
本地仓库里的依赖缓存可能损坏,导致证书验证失败。删除maven-clean-plugin的2.5版本目录:
rm -rf ~/.m2/repository/org/apache/maven/plugins/maven-clean-plugin/2.5
然后强制更新依赖重新构建:
mvn clean install -U
-U参数会强制Maven更新快照和远程依赖的元数据。
4. 排查代理证书(如果使用代理)
如果是通过公司代理访问中央仓库,只导入中央仓库的证书是不够的,还需要导入代理服务器的根证书。联系运维拿到代理的根证书,然后按照步骤1的方法导入到Maven使用的JDK信任库中。
5. 检查环境变量和Maven配置的一致性
确保JAVA_HOME环境变量指向的JDK和Maven使用的JDK一致(用mvn -version确认)。有时候我们手动设置了JAVA_HOME,但Maven用了系统默认的JDK,导致证书导入的位置不对。
如果以上步骤都试过还是不行,可以尝试直接访问中央仓库的pom文件,用浏览器检查证书链是否完整,确认你的机器能正常信任这个证书链。
内容的提问来源于stack exchange,提问作者RupeshJha




