前言:之前创建SpringBoot项目也出现过此问题,但是换了一个maven仓库好使了,但是没过多久那个仓库访问不了了,然后项目就开始报错。这几天自己创建项目又出现了这个问题,感觉再不彻底解决,人都不好了。

一、问题描述

       通过Spring Initializer创建SpringBoot项目,发现出现了问题,我首先检查的是maven的settings的配置文件,发现其中配置的是阿里云的仓库,配置是没有问题的,但是包还是导入不进去,reimport也没有效果。执行clean命令显示的是如下的错误:

        Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:2.2.0.RELEASE from/to nexus-aliyun (https://maven.aliyun.com/nexus/content/groups/public): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

有图有真相:

二、查找问题原因

进入报错的网站查找springbootRELEASE2.2.0的(https://maven.aliyun.com/repository/central)

显而易见,是有这个包的。后来换了其他的版本,还是这个德性,由此可见并不是版本的问题。

然后针对报错信息的后半部分进行研究,找到问题的解决方法。

后半部分报错信息:

        sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target(无法找到有效的证书)

意思就是服务器提供的证书不被我们客户端信任。

三、解决方法(两种方法)

第一种方法:在执行maven命令时忽略证书检查

在此处设置忽略证书检查

忽略证书检查的命令:

-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true

亲测好使:

第二种方法:手动导入证书,即将安全证书导入到java的cacerts证书库

确保maven中settings.xml中的阿里源配置正确

<mirror>
   <id>nexus-aliyun</id>
   <mirrorOf>central</mirrorOf>
   <name>Nexus aliyun</name>
   <url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

打开阿里源的网址:https://maven.aliyun.com/nexus/content/groups/public或https://maven.aliyun.com/repository/central(都是一样的

在chrome浏览器下载证书到本地

根据以下步骤,一直next,将文件命名为ali_maven,后缀默认为.cer,保存到D盘根目录

设置导出证书的编码格式:

通过证书添加java信任证书库

(1)打开C:\Program Files\Java\jdk1.8.0_121\jre\lib\security目录。(cacerts包含了很多CA证书,位置在Java的安装目录:如: C:\Program Files\Java\jdk1.8.0_121\jre\lib\security\carcerts)

(2)在该目录下以管理员身份打开命令提示符(cmd)

(3)输入该命令:keytool -import -alias cacerts -keystore cacerts -file d:\ali_maven.cer

(4)输入默认的密钥库口令:changeit

(5)是否信任此证书?[否]:Y

(6)显示证书已添加到密钥库中即表示添加成功

(7)回到项目中重新clean,complie,解决问题。

四、总结

第一种方法感觉治标不治本,只是针对当前的项目来说是可以的,但是每次创建项目加那个配置比较麻烦,对比第二种方法包导入的速度比较慢,而且下次再创建项目也不需要再做配置。建议使用第二种方法,问题解决的十分彻底。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐