移除功能后出现jdk.internal.util.ArraysSupport初始化失败问题求助
问题描述
谨慎移除部分功能后出现如下错误,抛出错误的代码区域未做任何修改,更换JDK 11发行版也无法解决该问题。
错误日志
java.lang.NoClassDefFoundError: Could not initialize class jdk.internal.util.ArraysSupport at java.util.Arrays.equals(Arrays.java:2873) ~[?:?] at sun.security.util.ObjectIdentifier.equals(ObjectIdentifier.java:381) ~[?:?] at sun.security.x509.AlgorithmId.derEncode(AlgorithmId.java:213) ~[?:?] at sun.security.x509.AlgorithmId.encode(AlgorithmId.java:158) ~[?:?] at sun.security.x509.X509Key.encode(X509Key.java:471) ~[?:?] at sun.security.x509.X509Key.buildX509Key(X509Key.java:214) ~[?:?] at sun.security.x509.X509Key.parse(X509Key.java:170) ~[?:?] at sun.security.x509.CertificateX509Key.<init>(CertificateX509Key.java:75) ~[?:?] at sun.security.x509.X509CertInfo.parse(X509CertInfo.java:674) ~[?:?] at sun.security.x509.X509CertInfo.<init>(X509CertInfo.java:169) ~[?:?] at sun.security.x509.X509CertImpl.parse(X509CertImpl.java:1842) ~[?:?] at sun.security.x509.X509CertImpl.<init>(X509CertImpl.java:194) ~[?:?] at sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:105) ~[?:?] at java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:355) ~[?:?] at sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:435) ~[?:?] at sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:369) ~[?:?] at sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392) ~[?:?] at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:443) ~[?:?] at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:421) ~[?:?] at sun.security.ssl.TransportContext.dispatch(TransportContext.java:182) ~[?:?] at sun.security.ssl.SSLTransport.decode(SSLTransport.java:172) ~[?:?] at sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1426) ~[?:?] at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1336) ~[?:?] at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:450) ~[?:?] at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:421) ~[?:?] at org.postgresql.ssl.MakeSSL.convert(MakeSSL.java:40) ~[postgresql-42.2.6.jar:42.2.6] at org.postgresql.core.v3.ConnectionFactoryImpl.enableSSL(ConnectionFactoryImpl.java:441) ~[postgresql-42.2.6.jar:42.2.6] at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:94) ~[postgresql-42.2.6.jar:42.2.6] at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192) ~[postgresql-42.2.6.jar:42.2.6] at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.2.6.jar:42.2.6] at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195) ~[postgresql-42.2.6.jar:42.2.6] at org.postgresql.Driver.makeConnection(Driver.java:458) ~[postgresql-42.2.6.jar:42.2.6] at org.postgresql.Driver.connect(Driver.java:260) ~[postgresql-42.2.6.jar:42.2.6] at java.sql.DriverManager.getConnection(DriverManager.java:677) ~[java.sql:?] at java.sql.DriverManager.getConnection(DriverManager.java:189) ~[java.sql:?] at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:155) ~[spring-jdbc-5.3.12.jar:5.3.12] at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:146) ~[spring-jdbc-5.3.12.jar:5.3.12] at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:205) ~[spring-jdbc-5.3.12.jar:5.3.12] at org.springframework.jdbc.datasource.SingleConnectionDataSource.initConnection(SingleConnectionDataSource.java:224) ~[spring-jdbc-5.3.12.jar:5.3.12] at org.springframework.jdbc.datasource.SingleConnectionDataSource.getConnection(SingleConnectionDataSource.java:164) ~[spring-jdbc-5.3.12.jar:5.3.12] at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) ~[spring-jdbc-5.3.12.jar:5.3.12] at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) ~[spring-jdbc-5.3.12.jar:5.3.12] at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) ~[spring-jdbc-5.3.12.jar:5.3.12] at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:376) ~[spring-jdbc-5.3.12.jar:5.3.12] at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:465) ~[spring-jdbc-5.3.12.jar:5.3.12] at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:475) ~[spring-jdbc-5.3.12.jar:5.3.12] at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:508) ~[spring-jdbc-5.3.12.jar:5.3.12] at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:515) ~[spring-jdbc-5.3.12.jar:5.3.12]
排查与解决建议
- 检查JVM模块访问参数:
jdk.internal.util.ArraysSupport是JDK内部类,移除功能时可能误加了限制模块的启动参数(如--limit-modules、--patch-module),导致java.base模块无法正常初始化。检查启动命令,确保没有限制核心模块访问,必要时添加--add-modules java.base。 - 清理类路径冲突:排查是否有旧版本JDK相关JAR包混入类路径,这类冲突会干扰JDK内部类加载。移除或替换冲突的依赖包。
- 验证SSL连接配置:错误发生在PostgreSQL SSL握手阶段,检查数据库SSL配置、信任库文件是否完整,确认移除功能时未误删证书相关资源。
- 清理编译缓存:移除功能后可能残留旧编译文件,清理项目的
target目录、Maven/Gradle本地缓存,重新编译打包。 - 重新验证JDK完整性:更换JDK时确保安装包是官方完整版本,可重新下载Oracle或OpenJDK 11的官方包替换现有JDK。
内容的提问来源于stack exchange,提问作者Lex Parser
相关产品推荐
相关产品推荐

