使用 Java 8,您可以继续使用已弃用的机制。Oracle 仅提供一种方法来检查您的应用程序是否使用Java 8 更新 40 及更高版本中提供的带有 java.exe 标志-XX:+CheckEndorsedAndExtDirs
[ 1 ] 的机制。
当您升级到 Java 9 时,为了避免您的 Java 应用程序在运行时失败,出现由 ClassNotFoundException 引起的 NoClassDefFoundError,例如
Exception in thread "pool-1-thread-3" java.lang.NoClassDefFoundError: javax/rmi/CORBA/Stub
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
at java.base/java.security.SecureClassLoader.defineClass(Unknown Source)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(Unknown Source)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(Unknown Source)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(Unknown Source)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
at org.jacorb.orb.ORB._getDelegate(ORB.java:541)
at org.jacorb.orb.ORB.string_to_object(ORB.java:2110)
--snip--
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: javax.rmi.CORBA.Stub
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 26 more
您需要使用 --add-modules --patch-module -add-exports 等参数更新您的 java.exe 启动命令行
有关具体示例,请参阅 Grzegorz Grzybek 在 2016 年 9 月发表的关于 jacorb-developer 邮件 [ 2 ] 的帖子。我们必须使用 Java 9 的附加命令行参数来更新应用程序的 Windows 批处理文件,例如
java --add-modules "java.corba" --patch-module "java.corba=..\lib\jacorb-omgapi-3.4.jar" --add-exports=java.corba/org.omg.CONV_FRAME=ALL-UNNAMED --add-exports=java.corba/org.omg.CORBA_2_5=ALL-UNNAMED --add-exports=java.corba/org.omg.PortableGroup=ALL-UNNAMED --add-exports=java.corba/org.omg.ETF=ALL-UNNAMED --add-exports=java.corba/org.omg.GIOP=ALL-UNNAMED --add-exports=java.corba/org.omg.SSLIOP=ALL-UNNAMED --add-exports=java.corba/org.omg.CSIIOP=ALL-UNNAMED -jar ourapp.jar
一个与 CORBA 和 Java 相关的脚注,CORBA(和 JAXB)计划在 Java 11 中完全删除。请参阅“JEP 320:删除 Java EE 和 CORBA 模块”[ 3 ] 和这篇博文 [ 4 ]。