如何支持在Java9中使用Java1.8构建的应用程序?

如何支持在Java9中使用Java1.8构建的应用程序?,java,java-9,Java,Java 9,我们有一个使用Java 1.8构建的独立应用程序,当我使用Java 9测试运行该应用程序时,我在javax.xml.soap.SoapException类上得到一个NoClassDefError异常。我已经读了很多书,知道Java9现在有了模块的概念。。。如果我在应用程序的启动脚本中的“java”调用中添加“-addmodules java.se.ee”选项,它就会正确运行 我的问题是。。。如何仍然支持该应用程序在1.8 JRE上运行?我不能只在启动脚本中添加--add modules选项,因为

我们有一个使用Java 1.8构建的独立应用程序,当我使用Java 9测试运行该应用程序时,我在javax.xml.soap.SoapException类上得到一个NoClassDefError异常。我已经读了很多书,知道Java9现在有了模块的概念。。。如果我在应用程序的启动脚本中的“java”调用中添加“-addmodules java.se.ee”选项,它就会正确运行

我的问题是。。。如何仍然支持该应用程序在1.8 JRE上运行?我不能只在启动脚本中添加--add modules选项,因为在尝试运行1.8 JRE时会导致错误。我真的不想在启动脚本中加入逻辑来确定用户正在运行哪个版本的JRE,也不想在其中添加新的--addmodules选项


有什么建议吗?提前谢谢

您应该在应用程序中包含特定于java9的信息“module info.java”,这样就不需要命令行选项。请看这篇文章。这提供了解决您提出的兼容性问题的方法

请在应用程序中包含module-info.java文件。java 9将考虑相同的内容,将被java 8忽略。

< p> Web服务模块(java. xML.WS,其中包括SAAJ)已经被禁止在java SE 9中,以便将来从java SE和JDK中删除它。删除它的第一步是默认情况下不解决它。这个模块“似乎”不存在,这就是为什么在JDK 9上运行它时会得到一个CNFE

是的,您可以使用
--add modules=java.xml.ws
(比
--add modules=java.se.ee
更精确)暂时解决这个问题,并且您应该能够让脚本使用JDK_java_OPTIONSenv变量(请参阅),该变量在JDK 9中是新的,因此在JDK 8中将被忽略


替代方案(JDK9迁移指南将对此有更多介绍)是转向JAX-WS和SAAJ的独立版本。这些API有独立版本,与JavaSE和JDK的更新速度不同。例如,您应该在Maven中找到最新版本(2.3.0)。标准版本可以部署在类路径上,并在将来将应用程序迁移到模块时作为模块部署。

理想情况下,您应该使用