簡體   English   中英

如何在Java 9中支持使用Java 1.8構建的應用程序?

[英]How do I support an application built using Java 1.8 in Java 9?

我們有一個使用Java 1.8構建的獨立應用程序,當我測試使用Java 9運行該應用程序時,在javax.xml.soap.SoapException類上收到了NoClassDefError異常。 我已經足夠了解Java 9現在具有模塊概念了……並且如果我在應用程序的啟動腳本中的“ java”調用上添加了“ --add-modules java.se.ee”選項,然后它可以正確運行。

我的問題是...我如何仍支持此針對1.8 JRE運行的應用程序? 我不能只在啟動腳本中放入--add-modules選項,因為在嘗試針對1.8 JRE運行時會導致錯誤。 我真的不想在啟動腳本中放入邏輯來嘗試確定用戶正在運行的JRE版本,也可以選擇在其中添加新的--add-modules選項。

有什么建議么? 提前致謝!

您應該在應用程序中包含特定於Java9的信息“ module-info.java”,因此它將不需要命令行選項。 請參見此處的示例: 如何通過manifest.mf添加Java 9模塊?

請看一下這篇文章。 這提供了解決您提出的兼容性問題的方法。

https://dzone.com/articles/the-legacy-developers-guide-to-java-9

請在您的應用程序中包含module-info.java文件。 Java 9會認為相同,而Java 8將忽略它。

Web服務模塊(包括SAAJ的java.xml.ws)已在Java SE 9中棄用,以期將來從Java SE和JDK中刪除。 刪除它的第一步是默認情況下不解決它。 這是“好像”模塊不存在,這就是為什么在JDK 9上運行它時會得到CNFE的原因。

是的,您可以使用--add-modules=java.xml.ws (比--add-modules=java.se.ee更為精確)暫時解決此問題,並且您應該能夠使用以下方法來解決此問題: JDK 9中新增的JDK_JAVA_OPTIONS環境變量(請參閱http://jdk.java.net/9/release-notes#JDK-8170832 ),因此在JDK 8中將被忽略。

替代方案(以及《 JDK 9遷移指南》將對此進行更多介紹)是移至JAX-WS和SAAJ的獨立版本。 這些API具有獨立版本,它們的更新速度與Java SE和JDK的更新速度不同。 例如,您應該在Maven中找到最新的(2.3.0)。 標准版本可以部署在類路徑上,將來也可以部署為模塊,以備將來將應用程序遷移到模塊時使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM