Java9中的Exports、Indirect Exports、Requires和Indirect Requires之间的区别?
Posted
技术标签:
【中文标题】Java9中的Exports、Indirect Exports、Requires和Indirect Requires之间的区别?【英文标题】:Difference between Exports, Indirect Exports, Requires and Indirect Requires in Java9? 【发布时间】:2018-02-02 09:20:50 【问题描述】:我浏览了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
作为要求或间接要求或间接导出。这里不一致的原因是什么?
寻找可以帮助理解(2)中发生的情况以及我们应遵循哪些实践以适应使用Java9的模块结构的这些区别的示例。
【问题讨论】:
【参考方案1】:注意在:
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
。
【讨论】:
我的意思是没有提到作为一个包。 download.java.net/java/jdk9/docs/api/… 我已经用信息更新了答案,因为我理解了这个问题。如果模块 A“将 sun.awt 导出到 B”,则 B 的客户端无法看到“sun.awt”,即使 B 确实在 A 上“需要传递”。以上是关于Java9中的Exports、Indirect Exports、Requires和Indirect Requires之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章