我正在使用模块从Java 9(jdk 9.0.4)中的Java 8重新构建应用程序。其中一个模块需要向我们的服务器发出SOAP调用,以检查各种服务是否正在运行,然后通过电子邮件报告这些服务的状态。
我知道SOAP库已在Java 9中弃用但尚未删除。我在适当的模块信息中声明了java.xml.ws
模块的要求:
module services {
exports com.nams.hyperion.services;
requires configurations;
requires java.xml.ws;
}
它编译,但我尝试运行项目时出错:java.lang.NoClassDefFoundError: javax/xml/soap/SOAPConnectionFactory
scf = SOAPConnectionFactory.newInstance(); <-- error here
conn = scf.createConnection();
mf = MessageFactory.newInstance();
msg = mf.createMessage();
我尝试使用--add-modules java.xml.ws
编译器选项,但这不能解决问题;我的Java安装没有这个模块吗?我有什么选择?我已经在maven周围寻找一个单独的发行版,但还没有找到任何东西。
我找到了一个可以使用的Maven发行版:https://search.maven.org/artifact/com.sun.xml.ws/rt-jdk9/2.3.0/jar
但是,module-info文件给我一个警告,我的模块从2个同名的源读取java.xml.ws
;但项目正在运行,这对我来说至关重要。我将研究如何处理模糊性,如果我设法做到这一点,我会更新这个答案。
更新:我通过从模块的依赖项中删除jar文件解决了歧义,但将其保留在Maven的依赖项列表中。