Я пытаюсь сделать что-то, что должно быть тривиально, но есть проблема, с которой я сталкиваюсь.
Поставщик безопасности надувного замка не будет загружаться при миграции приложения JavaFx с Java 8 на Java 11 (пробовал также и Java 12, те же результаты).
Это проект Maven, который я обновил для использования плагинов, совместимых с Java 11. Компилируется нормально, но при запуске я получаю это в окне терминала:
банка. Лаунчер
java.lang.reflect.InvocationTargetException at
java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native
Метод) в
java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
в
java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.base / java.lang.reflect.Method.invoke (Method.java:567) в
javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
в
javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
в
java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native
Метод) в
java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
в
java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.base / java.lang.reflect.Method.invoke (Method.java:567) в
java.base / sun.launcher.LauncherHelper $ FXHelper.main (LauncherHelper.java:1051)
Blockquote
Причина: java.lang.NoClassDefFoundError:
org / bouncycastle / jce / provider / BouncyCastleProvider at
.Launcher.main (Launcher.java:14) ...
Еще 11 причин: java.lang.ClassNotFoundException:
org.bouncycastle.jce.provider.BouncyCastleProvider at
java.base / jdk.internal.loader.BuiltinClassLoader.loadClass (BuiltinClassLoader.java:583)
в
java.base / jdk.internal.loader.ClassLoaders $ AppClassLoader.loadClass (ClassLoaders.java:178)
в java.base / java.lang.ClassLoader.loadClass (ClassLoader.java:521)
... еще 12
В моем java.security провайдером надувных замков в качестве первого провайдера (также пробовал его в качестве последнего провайдера, но результаты те же)
#
# List of providers and their preference orders (see above):
#
security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider
security.provider.2=SUN
security.provider.3=SunRsaSign
security.provider.4=SunEC
security.provider.5=SunJSSE
security.provider.6=SunJCE
security.provider.7=SunJGSS
security.provider.8=SunSASL
security.provider.9=XMLDSig
security.provider.10=SunPCSC
security.provider.11=JdkLDAP
security.provider.10=JdkSASL
security.provider.11=Apple
security.provider.12=SunPKCS11
И в моем коде есть следующее (которое работало нормально, когда я тестировал обновление с java 8 до 9 или 10 в прошлом):
//Since Java 9 we set the unlimited crypto policy in code, not by applying the JCE jars.
Security.setProperty("crypto.policy", "unlimited");
//verify that JCE is applied
// init the BC security provider
if (Security.getProvider("BC") == null) {
Security.insertProviderAt(new BouncyCastleProvider(), 0);
logger.info("Security provider added successfully");
}
Банки с надувным замком: bcprov-jdk15on-1.61 (версия для провайдера надувного замка 1.61) и bcpkix-jdk15on-1.61.jar. Проживать в нужном месте.
командная строка, которую я использую для запуска приложения JavaFx:
java -cp lib - моды-пути-моды
--add-модулей = javafx.controls, javafx.fxml, javafx.graphics, javafx.web, javafx.swing
-jar .Launcher
И гарантированно, что моды и библиотеки находятся в нужном месте и доступны банке.
Я видел несколько проблем в StackOverflow.com, которые похожи на эту, но попробовал предлагаемые решения, но они не решили проблему.
Есть идеи, почему провайдер Bouncy Castle не загружается и как его решить?