Java9中的出口,间接出口,需求和间接需求之间的差异?

Nam*_*man 3 access-specifier java-9

我正在阅读API文档,jdk.accessibility并注意到它分别列出了所有这些.

  1. requires 在一个模块中具有范围的模块都是消耗模块的间接需求

  2. module-info.java模块如下:

    module jdk.accessibility {
        requires transitive java.desktop;
    
        exports com.sun.java.accessibility.util;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    并且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;
    
    Run Code Online (Sandbox Code Playgroud)

    但是,之后的文档jdk.accessibility没有提到sun.awt要求或间接要求或间接出口.这里出现不一致的原因是什么?

寻找可以帮助理解(2)中发生的事情的这些差异的示例,以及作为我们使用Java9适应模块结构的实践应该遵循的内容.

Mic*_*ter 5

请注意:

module java.desktop {
    ...
    ...
    exports sun.awt to
        javafx.swing,
        jdk.accessibility,
        oracle.desktop;
}
Run Code Online (Sandbox Code Playgroud)

sun.awt是一个包,而不是模块名称.(是另一个例子.)因此sun.awt,正如java.desktop已经引用的那样,在文档中没有提到它是有道理的.

编辑:另请注意,对于jdk.accessibility模块的客户端,sun.awt无法访问该程序包.也就是说,它被导出java.desktop 供使用, jdk.accessibility但不会成为其API的一部分.我已经确认(这里的例子)即使jdk.accessibility需要java.desktopas 也是如此transitive.

  • 我已经用信息更新了答案,因为我理解了这个问题.如果模块A"将sun.awt导出到B",则B的客户端看不到"sun.awt",即使B在A上"需要传递". (2认同)