【问题标题】:Java 8 32-bit - Could not initialize JCEJava 8 32 位 - 无法初始化 JCE
【发布时间】:2019-03-01 16:02:57
【问题描述】:

我将项目 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)

【问题讨论】:

    标签: java eclipse maven 32-bit jce


    【解决方案1】:

    我找到了答案。 JDK 和 Eclipse 都没有问题。简单的答案是:

    在我们的代码中,java.home 变量分配给自定义值。

    说明:

    变量java.home 指向Java 安装目录,如System.getProperties() 的文档中所述。它总是可用的。 在正常情况下,此变量的值是从 JAVA_HOME 系统变量中推断出来的。

    更多有趣的阅读here on SO

    但由于我们计算机的一些奇怪配置,有人决定为本地测试环境手动设置它。 当 JDK 路径发生变化时,它一直有效,直到 JDK 迁移。

    给他人的提示:

    JDK升级后,当你使用Eclipse时,有几个地方可以检查配置:

    1. 首选项 -> Java -> 安装的 JRE
    2. 项目属性 -> Java 构建路径 -> JRE 系统库
    3. 项目属性 -> Java 编译器
    4. 运行配置(例如用于 Maven 构建运行)-> JRE
    5. 检查 System.getenv() 变量是否有奇怪的值。

    【讨论】:

      猜你喜欢
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多