java - Java 8 32 位 - 无法初始化 JCE
问题描述
我将项目 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 系统变量中推断出来的。
在这里阅读更多有趣的内容。
但是由于我们计算机的一些奇怪配置,有人决定为本地测试环境手动设置它。当 JDK 路径发生变化时,它一直有效,直到 JDK 迁移。
对其他人的提示:
在 JDK 升级后,当您使用 Eclipse 时,有几个地方可以检查配置:
- 首选项 -> Java -> 已安装的 JRE
- 项目属性 -> Java 构建路径 -> JRE 系统库
- 项目属性 -> Java 编译器
- 运行配置(例如 Maven 构建运行)-> JRE
- 检查System.getenv()变量是否有奇怪的值。
推荐阅读
- r - 调用存储在列表中的函数参数
- python - 在 Python 中使用 re.compile 函数逐行解析 gcode 文件
- python - 将填充有多个值的单元格分解为唯一行
- angular - Angular - 从 URL 获取组件名称
- javascript - 在 Angular 8 中动态添加 ngx-slick-carousel
- docker - 在 Kubernetes 集群中看不到
- python-3.x - Python 脚本在 CMD 中手动执行,但在调度程序中出错
- ios - 如何在 Swift 中解析 iOS Firebase 存储错误代码?
- javascript - 如何使用自定义 HTML 按钮调用 Mapbox GL JS Draw Polygon 函数?
- javascript - javascript查找数组中的所有对象并将其转换为数组到数组