release notes for Java 8 Update 40 (8u40)州:
认可标准覆盖机制和扩展机制 已弃用,可能会在将来的版本中删除。没有 运行时更改。使用'认可标准的现有应用程序 建议使用override'或'extension'机制进行迁移 使用这些机制。
还有一个问题澄清了Jigsaw(计划用于Java SE 9,AFAIK),这将以某种方式用模块化方法取代:
http://bugs.java.com/view_bug.do?bug_id=8065675
我知道Oracle现在想要弃用这些机制,因为他们不再支持Java SE 9了。
另一方面,如果不提供替代方案,弃用某些东西并不是一个好习惯。
发行说明指出:“建议现有应用程序迁移使用这些机制”
那你怎么能“远离”
在Java SE 8中?
答案 0 :(得分:3)
我找到了以下文章,它解释了这些机制确实计划在Java SE 9中删除:
https://blogs.oracle.com/java-platform-group/entry/planning_safe_removal_of_under
不幸的是,你现在似乎无能为力,例如对于属于JRE的图书馆而言。
如果您受到影响该怎么办
虽然大多数应用程序不使用 一些应用程序可以使用认可的标准或扩展机制。 如果您是开发人员,请考虑提供依赖项作为一部分 您的应用程序,而不是需要外部系统 配置。如果您不是开发人员,请联系 个人软件供应商的支持。
答案 1 :(得分:2)
使用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
您需要使用类似的参数更新java.exe启动命令行 --add模块 --patch模块 -add出口
有关具体示例,请参阅Grzegorz Grzybek在jacorb-developer邮件[2]上发布的2016年9月帖子。我们必须使用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]。