一直使用阿里的maven镜像,快。

上周才发现阿里更新了镜像的配置地址,兴冲冲地照原样抄袭了下来。

更新完之后才发现无法编译打包了,pom.xml 文件也提示有错误。报错信息类似这样:

1
[WARNING] Could not transfer metadata xxxxxxx from/to https://maven.aliyun.com/repository/public: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

面向 google 编程之后,才知道因为阿里云的 maven 仓库升级为 https 协议了,我们IDEA使用 maven 编译打包时,调用本机的 JDK ,JDK 发现阿里云 maven 地址的 https 证书不在它的证书库里。然后就报错了。

解决办法当然是把证书导入到 JDK 的证书库里去。

步骤如下:

  1. 下载阿里云 maven 的证书

    下载证书很容易,我们只要用浏览器访问阿里云 maven 仓库的网址,就会发现地址栏最前面有一个绿色小锁子,打开小锁子,在里面就能找到证书,将其导出就可以啦。

    推荐使用 firefox,chrome 浏览器,比 ie 查找证书方便多了。

  2. 导入阿里云的证书

    如何导入呢?

    JDK 的证书库是一个文件,目录可能如下:

    1
    
    C:\Program Files\AdoptOpenJDK\jdk-11.0.4.11-hotspot\lib\security
    

    我使用的是AdoptOpenJDK,Oracle 的也一样。这个目录下的 cacerts 就是 JDK 的证书库。我们把下载的阿里云证书导入它里面就可以了。

    1
    
    keytool -import -alias 证书别名 -keystore 证书库 -file 阿里云证书 -trustcacerts -storepass changeit
    

    证书别名,名称随意,最好能让人一眼明白这个证书的来源等,例如可以叫 aliyun.maven.cer;

    证书库,这个就是我们 JDK 的cacerts了;

    阿里云证书,就是我们刚才下载的证书;

    changeit,是默认的密码,不用修改。

    如果提示是否确认,输入 yes | y 就行。 只要路径正确,证书就完成导入了。后面就可以开开心心地编译啦。

这种导入方式虽然简单,但缺点也同样明显。如果我们升级 JDK 版本之后,必须再来一遍;而且仅仅为了 maven 编译就导入一个证书有风险隐患,更科学合理的方式就是使用 maven 的自定义证书库,这个我下次学会了再分享。😅

参考