这是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
之间存在循环依赖关系,对吗?是否允许platform modules之间的周期?
答案 0 :(得分:10)
模块系统禁止使用requires
子句静态声明循环。这适用于平台和应用程序模块,您提供的示例不违反该规则。
要求子句只是模块图中可读性边缘的一个来源。其他是命令行标志,反射,requires transitive
,我确信还有更多。添加所有这些可能会导致模块图中的循环,并且不会被禁止。
在您的具体示例中,只有在 java.base 读取 java.rmi 时才会创建循环,如果它在com.sun.rmi.rmid
中的类上使用反射,则可能会发生这种情况