Artifactory-oss-6.23.42搭配Java17启动报ClassNotFoundException求助
问题原因
这个报错的核心原因是Artifactory 6.23.42的证书生成逻辑依赖了Java的内部API类com.sun.security.cert.internal.x509.X509V1CertImpl,而从Java 9开始,Sun/Oracle的这类内部API就被逐步移除、隐藏,Java 17更是彻底禁用了对该类的访问,导致启动时无法自动生成证书。
解决方案
1. 降级Java版本(推荐)
Artifactory 6.x系列官方仅支持Java 8和Java 11,完全不兼容Java 17。直接将Java环境切换为Java 8或11,就能解决这个兼容性问题,这也是最稳妥的方案。
2. 临时兼容Java 17(不推荐生产使用)
如果必须使用Java 17,可以尝试通过添加JVM启动参数,强制允许Artifactory访问已被隐藏的内部API:
- 找到Artifactory的启动脚本(比如
artifactory.sh或artifactory.bat) - 在
JAVA_OPTS参数中添加以下内容:
--add-exports java.base/sun.security.cert=ALL-UNNAMED --add-exports java.base/com.sun.security.cert.internal.x509=ALL-UNNAMED
这种方式属于临时 workaround,后续可能出现其他未预见的兼容性问题,不建议在生产环境使用。
3. 手动配置SSL证书
跳过Artifactory自动生成证书的步骤,手动生成并配置证书:
- 使用
keytool或openssl生成自签SSL证书和私钥,例如:
keytool -genkeypair -alias artifactory -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore artifactory.p12 -validity 3650
- 找到Artifactory的配置文件
$ARTIFACTORY_HOME/etc/artifactory.config.xml - 修改
<ssl>节点,指定已生成的证书路径、密钥库密码等信息,示例:
<ssl> <keystorePath>/path/to/artifactory.p12</keystorePath> <keystorePassword>your-keystore-password</keystorePassword> <keystoreType>PKCS12</keystoreType> <certificatePassword>your-cert-password</certificatePassword> </ssl>
- 保存配置后重新启动Artifactory
内容的提问来源于stack exchange,提问作者fatherazrael
相关产品推荐
相关产品推荐

