所以我在 Working Soap client example 获取了 SOAP 示例,将其放入文件 SOAPClientSAAJ.java
,并尝试编译它(Debian 上的 Openjdk 9):
t@h ~/javatest> javac SOAPClientSAAJ.java
SOAPClientSAAJ.java:1: error: package javax.xml.soap is not visible
import javax.xml.soap.*;
^
(package javax.xml.soap is declared in module java.xml.ws, which is not in the module graph)
1 error
谷歌搜索后,我发现编译和运行为
t@h ~/javatest> javac --add-modules java.xml.ws SOAPClientSAAJ.java
t@h ~/javatest> java --add-modules java.xml.ws SOAPClientSAAJ
有效。另请参阅此视频了解一般背景:https://www.youtube.com/watch?v=y8bpKYDrF5I&t=20m17s
现在,问题:
- 编译器不应该自动添加模块 java.xml.ws 吗? (因为它显然知道它是必需的)这是 javax.xml.soap 中的错误吗?
- 为什么我的手册页中没有记录 --add-modules 选项? (Debian 中的 openjdk 9)
- 我应该在 .java 文件中写什么来自动添加 java.xml.ws 模块?
最佳答案
这是 new Java 9 modules 的结果. javax.xml.soap
包是 actually a Java EE package ,所以现在不可见。当前的解决方法是像您所做的那样使用--add-modules
,或者使用modularize your code。 .
模块化您的代码需要将其重组为模块,并包括一个指定您正在使用的模块的 module-info.java
文件。在您的情况下,指定 java.se.ee
将允许访问所有 EE 模块。
关于java - "package javax.xml.soap is declared in module java.xml.ws, which is not in the module graph",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46084302/