Java9 中导出、间接导出、需求和间接需求之间的区别?
Difference between Exports, Indirect Exports, Requires and Indirect Requires in Java9?
我正在查看 jdk.accessibility
的 API 文档并注意到它单独列出了所有这些。
一个模块中作用域为requires
的模块都是消费模块的Indirect Requires?
模块的module-info.java
如下:
module jdk.accessibility {
requires transitive java.desktop;
exports com.sun.java.accessibility.util;
}
并且对于 java.desktop
是这样的(试图包括不同的 -
module java.desktop {
...
requires java.prefs;
...
requires transitive java.xml;
exports java.applet;
...
exports sun.awt to
javafx.swing,
jdk.accessibility,
oracle.desktop;
opens javax.swing.plaf.basic to jdk.jconsole;
...
uses javax.sound.sampled.spi.MixerProvider;
...
provides javax.sound.sampled.spi.MixerProvider with
com.sun.media.sound.DirectAudioDeviceProvider,
com.sun.media.sound.PortMixerProvider;
但是 jdk.accessibility
的文档没有提及 sun.awt
作为 Requires 或 Indirect Requires 或 Indirect Exports。这里不一致的原因是什么?
寻找这些差异的示例,以帮助理解 (2) 中发生的事情,以及我们在适应模块结构时应遵循的做法Java9.
请注意:
module java.desktop {
...
...
exports sun.awt to
javafx.swing,
jdk.accessibility,
oracle.desktop;
}
sun.awt
是一个包,不是模块名。 (Here 是另一个例子。)因此,文档中不会提及 sun.awt
是有道理的,因为 java.desktop
已被引用。
编辑: 另外请注意,对于 jdk.accessibility
模块的客户端,无法访问 sun.awt
包。也就是说,它由 java.desktop
导出供 jdk.accessibility
使用,但不会成为其 API 的一部分。我已经确认 (example here) 这是真的,即使 jdk.accessibility
需要 java.desktop
作为 transitive
。
我正在查看 jdk.accessibility
的 API 文档并注意到它单独列出了所有这些。
一个模块中作用域为
requires
的模块都是消费模块的Indirect Requires?模块的
module-info.java
如下:module jdk.accessibility { requires transitive java.desktop; exports com.sun.java.accessibility.util; }
并且对于
java.desktop
是这样的(试图包括不同的 -module java.desktop { ... requires java.prefs; ... requires transitive java.xml; exports java.applet; ... exports sun.awt to javafx.swing, jdk.accessibility, oracle.desktop; opens javax.swing.plaf.basic to jdk.jconsole; ... uses javax.sound.sampled.spi.MixerProvider; ... provides javax.sound.sampled.spi.MixerProvider with com.sun.media.sound.DirectAudioDeviceProvider, com.sun.media.sound.PortMixerProvider;
但是
jdk.accessibility
的文档没有提及sun.awt
作为 Requires 或 Indirect Requires 或 Indirect Exports。这里不一致的原因是什么?
寻找这些差异的示例,以帮助理解 (2) 中发生的事情,以及我们在适应模块结构时应遵循的做法Java9.
请注意:
module java.desktop {
...
...
exports sun.awt to
javafx.swing,
jdk.accessibility,
oracle.desktop;
}
sun.awt
是一个包,不是模块名。 (Here 是另一个例子。)因此,文档中不会提及 sun.awt
是有道理的,因为 java.desktop
已被引用。
编辑: 另外请注意,对于 jdk.accessibility
模块的客户端,无法访问 sun.awt
包。也就是说,它由 java.desktop
导出供 jdk.accessibility
使用,但不会成为其 API 的一部分。我已经确认 (example here) 这是真的,即使 jdk.accessibility
需要 java.desktop
作为 transitive
。