问题 平台模块之间是否允许循环?


这是该模块的声明 java.rmi 模块:

module java.rmi {
    requires java.base;
    requires java.logging;

    exports java.rmi.activation;
    exports com.sun.rmi.rmid to java.base; // <-- cycle
    ...
}

因此,之间存在循环依赖关系 java.rmi 和 java.base, 对?是否允许循环 平台模块


4427
2018-05-22 04:32


起源

@Eugene com.sun.rmi 是由模块导出的包 java.rmi - ZhekaKozlov
@Eugent java.rmi 依赖于取决于 java.base。但它也将其包装出口到 java.base所以 java.base 显然需要访问这个包(否则这行代码没有意义)。 - ZhekaKozlov


答案:


模块系统禁止静态声明循环 requires 条款。这适用于平台和应用程序模块,您提供的示例不违反该规则。

但是,要求子句只是模块图中可读性边缘的一个来源。其他是命令行标志,反射, requires transitive,我相信还有更多。添加所有这些可能会导致模块图中的循环,并且不会被禁止。

在您的具体示例中,循环仅创建一次 java.base 读 java.rmi中,如果它在类中使用反射,则可能发生 com.sun.rmi.rmid


10
2018-05-22 06:25