Java9中导出、间接导出、Requires和间接Requires之间的区别?

Java9中导出、间接导出、Requires和间接Requires之间的区别?,java,java-9,java-platform-module-system,access-specifier,Java,Java 9,Java Platform Module System,Access Specifier,我正在浏览API文档,注意到它分别列出了所有这些 在一个模块中具有作用域requires的模块是否都是消费模块的间接requires 模块的module info.java如下所示: module jdk.accessibility { requires transitive java.desktop; exports com.sun.java.accessibility.util; } 而对于java.desktop则类似于(试图包括变化的- module java.des

我正在浏览API文档,注意到它分别列出了所有这些

  • 在一个模块中具有作用域
    requires
    的模块是否都是消费模块的间接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或间接Requires或间接导出。这里不一致的原因是什么

  • 寻找这些差异的示例,以帮助理解(2)中发生的事情,以及我们使用Java9适应模块结构时应遵循的做法。

    注意:

    module java.desktop {
        ...
        ...
        exports sun.awt to
            javafx.swing,
            jdk.accessibility,
            oracle.desktop;
    }
    
    sun.awt
    是一个包,而不是一个模块名。(这是另一个例子。)因此,文档中不会提到
    sun.awt
    ,因为已经引用了
    java.desktop


    编辑:另外,请注意,对于
    jdk.accessibility
    模块的客户端,
    sun.awt
    包是不可访问的。也就是说,它是由
    java.desktop
    导出的,供
    jdk.accessibility
    使用,但没有成为其API的一部分。我已经确认()即使
    jdk.accessibility
    要求
    java.desktop
    作为
    transitive

    不作为包提及,这也是我的意思。我已经用我理解的问题的信息更新了答案。如果模块a“将sun.awt导出到B”,则B的客户端无法看到“sun.awt”,即使B看到了A上的“要求可传递”。