我有一个非常简单的Java类
public class TestAnnotation {
public static void main(String[] args) {
System.out.println(javax.annotation.Generated.class.getName());
}
}
正如预期的那样,这不能使用JDK 9进行编译
"c:\Program Files\Java\jdk-9.0.1\bin\javac.exe" TestAnnotation.java
TestAnnotation.java:3: error: package javax.annotation is not visible
System.out.println(javax.annotation.Generated.class.getName());
^
(package javax.annotation is declared in module java.xml.ws.annotation, which is not in the module graph)
1 error
忽略错误消息(并使用java.xml.ws而不是建议的java.xml.ws.annotation),我可以使用
进行编译"c:\Program Files\Java\jdk-9.0.1\bin\javac.exe" --add-modules java.xml.ws TestAnnotation.java
但是,查看the module graph module java.xml.ws 并不依赖于模块 java.xml.ws.annotation ,它会导出 javax.annotation 包。
这怎么可能编译(并运行,顺便说一句)?
答案 0 :(得分:2)
java.xml.ws
确实取决于java.xml.ws.annotation
:http://hg.openjdk.java.net/jdk/jdk/file/68c6f57c40d4/src/java.xml.ws/share/classes/module-info.java#l46
module java.xml.ws {
requires java.desktop;
requires java.logging;
requires java.management;
requires java.xml.ws.annotation;
...
我不知道为什么在这张照片中缺少这种依赖性。可能他们只想显示关键链接。