[英]Alternative for deprecated endorsed-standards override mechanism and extension mechanism
Java 8 Update 40(8u40)的發行說明指出 :
已棄用的標准覆蓋機制和擴展機制已被棄用,可能會在將來的版本中刪除。 沒有運行時更改。 建議使用“認可標准覆蓋”或“擴展”機制的現有應用程序遠離使用這些機制。
還有一個問題澄清了Jigsaw(計划用於Java SE 9,AFAIK),這將以某種方式用模塊化方法取代:
http://bugs.java.com/view_bug.do?bug_id=8065675
我知道Oracle現在想要棄用這些機制,因為它們不再支持它們在Java SE 9中了。
另一方面,在不提供替代方案的情況下棄用某些東西並不是一種好的做法。
發布說明指出:“建議現有應用程序遷移遠離使用這些機制”
那么你怎么能“遠離”
在Java SE 8中?
我找到了以下文章,它解釋了這些機制確實計划在Java SE 9中刪除:
https://blogs.oracle.com/java-platform-group/entry/planning_safe_removal_of_under
不幸的是,現在似乎沒有什么可以做的,例如對於屬於JRE的庫而言。
如果受到影響該怎么辦
雖然大多數應用程序不使用認可的標准或擴展機制,但有些應用程序可以使用。 如果您是開發人員,請考慮將依賴項作為應用程序的一部分,而不是需要外部系統配置。 如果您不是開發人員,請與各個軟件供應商聯系以獲取支持。
使用Java 8,您可以繼續使用已棄用的機制。 Oracle僅提供了一種方法來檢查您的應用程序是否使用-XX:+CheckEndorsedAndExtDirs
更新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 ]。
您現在的后備是在執行Java實例時明確列出您的類路徑目錄和jar文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.