11

这是模块的模块声明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,对吧?平台模块之间是否允许循环?

4

1 回答 1

10

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

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

在您的具体示例中,只有在java.base读取java.rmi时才会创建循环,如果它对com.sun.rmi.rmid.

于 2017-05-22T06:25:08.413 回答