Maven 不会下载,因为来自 Maven Central 的 PKIX 错误

Maven won't download because PKIX error from 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>

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

虽然 none 这些解决方法应该是必要的。

什么似乎不起作用:

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"

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

将您的 settings.xml 配置为对 Maven 中央存储库使用 http 而不是 https 应该会有所帮助

<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>COMPANY\USER</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,一切正常。