32-разрядная версия Java 8 - не удалось инициализировать JCE - PullRequest
0 голосов
/ 01 марта 2019

Я обновляю проект 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)

Затем я установил JCE с сайта загрузки Oracle: https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

Ничего не изменится, за исключением того, что я совершенно уверен, что JCE установлен в соответствии с такими ответами: https://stackoverflow.com/a/13238132

В моем сценарии:

System.out.println(Cipher.getMaxAllowedKeyLength("AES"));

return

2147483647

Что не так?Почему эта среда не работает правильно?

Я работаю с jdk1.8.144 в 32-битной версии.И Eclipse Oxygen.3a Release (4.7.3a)

1 Ответ

0 голосов
/ 19 марта 2019

Я нашел ответ.Это не было проблемой ни с JDK, ни с Eclipse.Простой ответ:

В нашем коде есть переменная java.home, присвоенная пользовательскому значению.

Объяснение:

Переменная java.home указывает на каталог установки Java, как указано в документации System.getProperties () .Это всегда доступно.В обычном сценарии значение этой переменной определяется из системной переменной JAVA_HOME.

Более интересное чтение здесь, на SO .

Но из-за какой-то странной конфигурации наших компьютеров кто-то сделалрешение установить его вручную для локальной тестовой среды.И это работало до миграции JDK, когда путь JDK изменился.

Подсказки для других:

После обновления JDK при использовании Eclipse есть несколько мест для проверки конфигурации:

  1. Предпочтения ->Java -> Установленный JRE
  2. Свойства проекта -> Путь сборки Java -> Системная библиотека JRE
  3. Свойства проекта -> Компилятор Java
  4. Выполнить настройку (например, для запуска сборки Maven) -> JRE
  5. Проверка Переменные System.getenv () , если любая из них имеет странное значение.
...