2017-09-14 34 views
2

我們有一個使用Java 1.8構建的獨立應用程序,當我測試使用Java 9運行該應用程序時,我在javax.xml.soap.SoapException類中得到了一個N​​oClassDefError異常。我已經讀了足夠的知道Java 9現在有模塊概念......並且如果我在應用程序的啓動腳本的「java」調用中添加了「--add-modules java.se.ee」選項,它然後正確運行。如何支持在Java 9中使用Java 1.8構建的應用程序?

我的問題是...我仍然支持這個應用程序運行在1.8 JRE上?我不能只在啓動腳本中加入--add-modules選項,因爲在嘗試運行1.8 JRE時會導致錯誤。我真的不想在啓動腳本中放入邏輯來嘗試確定用戶正在運行哪個版本的JRE,並可以選擇將新的--add-modules選項放在那裏。

有什麼建議嗎?提前致謝!

+0

理想情況下,您應該轉向使用[獨立版本的'java.xml。*'API](https://stackoverflow.com/a/46221811/1746118) – nullpointer

回答

0

Java SE 9中已棄用Web服務模塊(java.xml.ws,其中包含SAAJ),以便將其從Java SE中移除並未來的JDK。走出去的道路上的第一步是默認情況下不解決它。這就是爲什麼當你在JDK 9上運行它時得到一個CNFE。

是的,你可以暫時用--add-modules=java.xml.ws(比--add-modules=java.se.ee更精確)解決它,你應該能夠得到你的腳本,選中這些使用JDK_JAVA_OPTIONS環境變量(見http://jdk.java.net/9/release-notes#JDK-8170832),這是在JDK 9個新的,因此將在JDK被忽略8.

的替代品(和JDK 9遷移指南會有更多關於此的內容)將轉向獨立版本的JAX-WS和SAAJ。這些API具有獨立版本,以不同的速度更新到Java SE和JDK。例如,您應該在Maven中找到最新的(2.3.0)。標準版本可以在類路徑上部署,並且將來可以作爲模塊部署,以便將來將應用程序遷移到模塊。

相關問題