• Maven无法下载依赖之PKIX path building failed问题及解决


    在使用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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这里方式以上错误的开发环境是:
    1.配置了JAVA_HOME 环境变量和PATH
    2. 企业内部有自己的证书,看起来对其他证书做了封装

    一般状况下, Maven 的库的证书是被信任的,因为这个证书在Java安装的时候就被包含在Java的证书库了。但是如果根证书使用企业内部的,则Java就不认识了, 所以需要将这个证书导入证书库中。

    导入的主要步骤是:

    1. 使用Chrom 导出证书
    2. 使用 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
    
    • 1

    如果需要, 可以将这个证书同步导入到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
    
    • 1

    导入证书:

    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
    
    • 1

    注意:

    • 如果是命令窗口执行 mvn 命令触发更新, 需要新开命令窗口
  • 相关阅读:
    el-menu入门学习
    Ai数字人直播系统SaaS源码大开源,源码独立部署助力中小企业发展!
    小程序百问百答
    【智慧工地源码】基于AI视觉技术赋能智慧工地
    [Qt开发]当我们在开发兼容高分辨率和高缩放比、高DPI屏幕的软件时,我们在谈论什么。
    微信小程序异常处理(持续记录中)
    五粮液包装车间MES系统建设----工业软件讲坛第五次讲座
    【深入浅出 Yarn 架构与实现】6-3 NodeManager 分布式缓存
    go语言 Error 1040: Too many connections 最大连接数
    JavaScript到底应不应该加分号?JavaScript自动插入分号规则详解
  • 原文地址:https://blog.csdn.net/oscar999/article/details/128008297