java - 平台模块之间是否允许循环?

标签 java java-9 java-platform-module-system

这是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.rmijava.base 之间存在循环依赖关系,对吗? platform modules之间是否允许循环?

最佳答案

模块系统禁止使用 requires 子句静态声明循环。对于平台和应用程序模块来说都是如此,并且您给出的示例并不违反该规则。

不过,Requires 子句只是模块图中可读性边缘的来源之一。其他的是命令行标志、反射、需要传递,我确信还有更多。添加所有这些可能会导致模块图中出现循环,但这是不禁止的。

在您的具体示例中,仅在java.base读取java.rmi时创建循环,如果它在com.sun.rmi.rmid中的类上使用反射,则可能会发生这种情况。

关于java - 平台模块之间是否允许循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44793339/

相关文章:

java - 为什么 StructuredArray 需要是不可构造的?

java - Java 8 模块与 OSGi 有何不同?

java - 无法识别的选项 : --print-module-descriptor

java - 如何通过sql "Like"运算符找到合适的句子?

java 9 未命名模块在调试时从两者读取包 [X](使用 IntelliJ)

java - 插件 maven-antrun-plugin 执行未包含在 m2e 的生命周期配置中

read-eval-print-loop - REPL 与 Java 9 的实际使用

java - 构建针对 Java 9 及更早版本的模块化 Java 应用程序

java - Tomcat 在请求完成时删除文件?

java - 重建图以查找小于初始最短路径的优化图数