"包javax.xml.soap在模块java.xml.ws中声明,它不在模块图中"

Thu*_*hue 10 java

所以我在Working Soap客户端示例中使用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
Run Code Online (Sandbox Code Playgroud)

谷歌搜索后,我发现编译和运行为

t@h ~/javatest> javac --add-modules java.xml.ws SOAPClientSAAJ.java
t@h ~/javatest> java --add-modules java.xml.ws SOAPClientSAAJ
Run Code Online (Sandbox Code Playgroud)

作品.有关一般背景,请参阅此视频:https://www.youtube.com/watch?v = y8bpKYDrF5I&t = 20m17s

现在,问题:

  1. 编译器不应该自动添加模块java.xml.ws吗?(因为它显然知道它是必需的)这是javax.xml.soap中的一个错误吗?
  2. 为什么我的手册页中没有记录--add-modules选项?(Debian中的openjdk 9)
  3. 我应该在.java文件中写什么来自动添加java.xml.ws模块?

Eva*_*les 15

这是新的Java 9模块的结果.该javax.xml.soap实际上是一个Java EE包,因此现在不可见.当前的解决方法是使用--add-modules,如您所做,或模块化您的代码.

模块化您的代码需要将其重组为模块,并包括module-info.java指定您正在使用的模块的文件.在您的情况下,指定java.se.ee将允许访问所有EE模块.

  • 请注意,**`--add-modules`解决方法仅适用于Java 9和Java 10**.Java 11及更高版本完全从[Java SE]中删除[Java EE](https://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition)相关模块(https://en.wikipedia.org/wiki/Java_Platform% 2C_Standard_Edition),责任重新安排到[Jakarta EE](https://jakarta.ee)组织.有关详细信息,请参阅[*JEP 320:删除Java EE和CORBA模块*](http://openjdk.java.net/jeps/320) (7认同)