在使用Maven从中央库下载依赖时, 报如下错误:
[[1;31mERROR[m] Plugin org.apache.maven.plugins:maven-source-plugin:3.0.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-source-plugin:jar:3.0.1: Could not transfer artifact org.apache.maven.plugins:maven-source-plugin:pom:3.0.1 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 -> [1m[Help 1][m
[[1;31mERROR[m]
[[1;31mERROR[m] To see the full stack trace of the errors, re-run Maven with the [1m-e[m switch.
[[1;31mERROR[m] Re-run Maven using the [1m-X[m switch to enable full debug logging.
[[1;31mERROR[m]
[[1;31mERROR[m] For more information about the errors and possible solutions, please read the following articles:
[[1;31mERROR[m] [1m[Help 1][m http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
这里方式以上错误的开发环境是:
1.配置了JAVA_HOME 环境变量和PATH
2. 企业内部有自己的证书,看起来对其他证书做了封装
一般状况下, Maven 的库的证书是被信任的,因为这个证书在Java安装的时候就被包含在Java的证书库了。但是如果根证书使用企业内部的,则Java就不认识了, 所以需要将这个证书导入证书库中。
导入的主要步骤是:
- 使用Chrom 导出证书
- 使用
keytool -import
导入证书,因为配置了JAVA_HOME,所以需要导入到JDK目录下的 jre\lib\security\cacerts 文件中, 具体命令如下:
keytool -import -trustcacerts -alias mvnrepo -file c:\\cert\mvnrepo.crt -keystore "C:\Program Files\Java\jdk1.8.0_131\jre\lib\security\cacerts" -storepass changeit
如果需要, 可以将这个证书同步导入到JRE目录的证书库文件cacerts 中,关于Java安装证书,可以参考: Java如何安装https证书
问题又现
使用一段时间之后, 某天又突然不行了,错误还是 PKIX 的证书问题。
解决方式是把之前添加的证书条目删除, 从浏览器下载之后, 重新导入:
从证书库删除证书:
keytool -delete -alias mvnrepo -keystore "C:\Program Files\Java\jdk1.8.0_131\jre\lib\security\cacerts" -storepass changeit
导入证书:
keytool -import -trustcacerts -alias mvnrepo -file c:\\cert\mvnrepo.crt -keystore "C:\Program Files\Java\jdk1.8.0_131\jre\lib\security\cacerts" -storepass changeit
注意:
- 如果是命令窗口执行 mvn 命令触发更新, 需要新开命令窗口