Maven:trustAnchors 参数必须为非空且 'parent.relativePath' @InvalidAlgorithmParameterException @Non-resolvable parent POM
Maven: trustAnchors parameter must be non-empty and 'parent.relativePath' @ InvalidAlgorithmParameterException @ Non-resolvable parent POM
我是 Maven 的新手并且 Spring。
该项目在我的本地测试环境中运行,但未在部署的系统上运行。
在部署的系统上:
我使用 OpenSDK 10.0.1、Maven 3.5.2 全新安装 Ubuntu
我在不同的防火墙后面,有不同的 keyStore 和 trustStore。
Maven吐槽:
Non-resolvable parent POM for org.[%mything%]
.app:useraut:0.0.1-SNAPSHOT: Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:1.5.9.RELEASE from/to central (https://repo.maven.apache.org/maven2): java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty and 'parent.relativePath' points at no local POM @ line 14, column 10 -> [Help 2]
pom 片段:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
(未定义代理)
看来我可以找到解决方案的想法:Error - trustAnchors parameter must be non-empty但我不知道从哪里开始配置 Spring、Maven 或 trustStore
据我所知,Ubuntu Linux 上的 OpenJDK Java 9 及更高版本的分发包存在弱点。所以安装 default-jdk 可能会破坏东西。
引用自:(https://bugs.launchpad.net/ubuntu/+source/openjdk-lts/+bug/1768799) + 其他证书更新。
请注意,重新安装 default-jdk 是可选的,openjdk-8 可以继续使用。
Workaround: remove default-jdk, install openjdk-8, remove openjdk-8 and reinstall default-jdk:
sudo apt purge openjdk-default java-common
sudo apt purge default-jdk java-common
sudo dpkg --purge --force-depends ca-certificates-java
sudo apt install openjdk-8-jre
sudo apt-get install ca-certificates-java
sudo apt purge openjdk-8-jre
sudo apt install default-jdk
在此之后,我还发现我使用的 Spring 版本在 Java 10.0.1 上 运行 效果不佳,所以回到 Java 8.x 用于此目的。
基本上是关于 ca-certificates-java。当您在 linux 发行版存储库之外获得 JDK 时,更令人沮丧。
这里我得到了线索:
http://rabexc.org/posts/certificates-not-working-java
我修改了评论中的bash脚本
CACERTS="/home/user/cacerts"
cd /etc/ssl/certs
for file in *.pem; do
echo "Importing $file..."
openssl x509 -outform der -in "$file" -out /tmp/certificate.der
keytool -import -alias "$file" -keystore $CACERTS \
-file /tmp/certificate.der -deststorepass changeit -noprompt
done
修改第一行以适合您自己。我 运行 它在 debian 上,对于其他系统,您可能还需要更改第二行。
然后我将 "cacerts" 文件复制到 JDK 中
$JAVA_HOME/jre/lib/security/cacerts
我是 Maven 的新手并且 Spring。
该项目在我的本地测试环境中运行,但未在部署的系统上运行。 在部署的系统上: 我使用 OpenSDK 10.0.1、Maven 3.5.2 全新安装 Ubuntu 我在不同的防火墙后面,有不同的 keyStore 和 trustStore。
Maven吐槽:
Non-resolvable parent POM for org.
[%mything%]
.app:useraut:0.0.1-SNAPSHOT: Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:1.5.9.RELEASE from/to central (https://repo.maven.apache.org/maven2): java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty and 'parent.relativePath' points at no local POM @ line 14, column 10 -> [Help 2]
pom 片段:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
(未定义代理)
看来我可以找到解决方案的想法:Error - trustAnchors parameter must be non-empty但我不知道从哪里开始配置 Spring、Maven 或 trustStore
据我所知,Ubuntu Linux 上的 OpenJDK Java 9 及更高版本的分发包存在弱点。所以安装 default-jdk 可能会破坏东西。
引用自:(https://bugs.launchpad.net/ubuntu/+source/openjdk-lts/+bug/1768799) + 其他证书更新。
请注意,重新安装 default-jdk 是可选的,openjdk-8 可以继续使用。
Workaround: remove default-jdk, install openjdk-8, remove openjdk-8 and reinstall default-jdk:
sudo apt purge openjdk-default java-common
sudo apt purge default-jdk java-common
sudo dpkg --purge --force-depends ca-certificates-java
sudo apt install openjdk-8-jre
sudo apt-get install ca-certificates-java
sudo apt purge openjdk-8-jre
sudo apt install default-jdk
在此之后,我还发现我使用的 Spring 版本在 Java 10.0.1 上 运行 效果不佳,所以回到 Java 8.x 用于此目的。
基本上是关于 ca-certificates-java。当您在 linux 发行版存储库之外获得 JDK 时,更令人沮丧。
这里我得到了线索: http://rabexc.org/posts/certificates-not-working-java
我修改了评论中的bash脚本
CACERTS="/home/user/cacerts"
cd /etc/ssl/certs
for file in *.pem; do
echo "Importing $file..."
openssl x509 -outform der -in "$file" -out /tmp/certificate.der
keytool -import -alias "$file" -keystore $CACERTS \
-file /tmp/certificate.der -deststorepass changeit -noprompt
done
修改第一行以适合您自己。我 运行 它在 debian 上,对于其他系统,您可能还需要更改第二行。
然后我将 "cacerts" 文件复制到 JDK 中 $JAVA_HOME/jre/lib/security/cacerts