我将项目JDK更新为jdk1.8.144_32bit(从1.7开始)。
但是发生以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class javax.crypto.JceSecurity
at javax.crypto.SecretKeyFactory.nextSpi(SecretKeyFactory.java:295)
at javax.crypto.SecretKeyFactory.<init>(SecretKeyFactory.java:121)
at javax.crypto.SecretKeyFactory.getInstance(SecretKeyFactory.java:160)
at oracle.jdbc.driver.T4C8TTIdty.<init>(T4C8TTIdty.java:517)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1603)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:496)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566)
at org.apache.commons.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:53)
at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:279)
at org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2343)
at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2329)
at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2071)
at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1525)
然后我从Oracle下载站点安装了JCE:https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
没有什么变化,除了我很确定根据这样的答案安装JCE:https://stackoverflow.com/a/13238132
在我的场景中:
System.out.println(Cipher.getMaxAllowedKeyLength("AES"));
返回
2147483647
怎么了?为什么这种环境不能正常工作?
我正在使用32位版本的jdk1.8.144。和Eclipse Oxygen.3a版本(4.7.3a)
我找到了答案。 JDK和Eclipse都没有问题。简单的答案是:
在我们的代码中,有
java.home
变量分配给自定义值。
说明:
变量java.home
指向Java安装目录,如System.getProperties()的文档中所述。它始终可用。在正常情况下,此变量的值是从JAVA_HOME系统变量推断出来的。
更有趣的阅读here on SO。
但是由于我们计算机的一些奇怪的配置,有人决定手动设置本地测试环境。当JDK路径发生变化时,它一直工作到JDK迁移。
其他人的提示:
在使用Eclipse进行JDK升级后,有几个地方可以检查配置: