Maven 无法下载,因为 PKIX 错误来自 Maven Central



几个月来我一直在我的机器上使用 maven,然后我开始从 maven Central 收到 PKIX 错误,这些错误阻止我下载适当的依赖项。

> mvn compile
[INFO] Scanning for projects...
Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-parent/2.1.7.RELEASE/spring-boot-starter-parent-2.1.7.RELEASE.pom
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM for com.test:testproject:0.0.1-SNAPSHOT: Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:2.1.7.RELEASE 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 and 'parent.relativePath' points at no local POM @ line 5, column 10

Maven的完整调试输出似乎没有提供任何其他信息.
我在Spring Initializr上使用生成器创建了pom,没有其他选项或依赖项。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.test</groupId>
<artifactId>testproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>test</name>
<description>Demo project for Spring Boot</description>

<properties>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

什么提供了临时解决方法:

  • 使用同一 POM 文件在其他计算机上编译
  • 更改我的设置.xml以指向私人镜像
  • 添加标志以忽略证书错误。

尽管这些解决方法都不是必需的。

似乎不起作用的内容:

  • 手动将证书安装到 CACERTS 中
  • 重新安装 Java 和 Maven
  • 删除 .m2 目录(包括设置.xml)
Maven home: /usr/local/Cellar/maven/3.6.1/libexec
Java version: 1.8.0_201, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.6", arch: "x86_64", family: "mac"

update
手动使用-Djavax.net.ssl.trustStore=$JAVA_HOME/jre/lib/security/cacerts指定信任库似乎可以解决问题。我不确定为什么Maven默认情况下找不到此文件以及如何修复它。

配置您的设置.xml使用 http 而不是 https 对于 maven 中央存储库应该会有所帮助

<settings>
.
.
.
<mirrors>
<mirror>
<id>central-no-ssl</id>
<name>Central without ssl</name>
<url>http://repo.maven.apache.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
.
.
.
</settings>

如果您使用的是代理,则必须在 maven 设置 xml 中添加配置

<settings>
.
.
<proxies>
<proxy>
<id>mycompany</id>
<active>true</active>
<protocol>https</protocol>
<host>10.203.13.45</host>
<port>8080</port>
<username>COMPANYUSER</username>
<password>PASSWORD</password>
<nonProxyHosts>127.0.0.1|localhost</nonProxyHosts>
</proxy>
<!-- -->
</proxies>
.
</settings>

在Mac上通过Homebrew安装的Maven 3.6.1或Oracle Java 8_221似乎存在问题。它似乎没有正确选取默认的信任库(cacerts)。手动指定信任库将起作用。

为了解决我的问题,我只是将MVN_HOME更改为旧版本的 3.6.0(97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T14:41:47-04:00)并安装了 AdoptOpenJDK8,一切都很好。

最新更新