模块声明中的require和require静态有什么区别

问题描述

一条requires子句表示在编译和运行时需要所需的模块。因此,当模块系统在模块解析(处理模块描述符和解决依赖关系的阶段)期间遇到此类子句时,它将搜索可观察模块(JDK和模块路径中的模块)的范围,并引发错误如果找不到模块。

一个requires static从句表示的依赖是在运行时可选。这意味着在编译时,模块系统的行为完全如上所述。

另一方面,在运行时,它主要忽略requires static子句。如果遇到一个,它将 。这意味着,如果仅使用引用可观察模块requires static,则不会将其纳入模块图中!起初这可能有点令人惊讶。另一方面,如果模块以其他方式将其放入图形中(由其他模块要求,通过服务绑定手动添加--add- modules,通过服务绑定来添加),则对它具有可选依赖关系的所有模块都可以读取该图。

解决方法

模块声明中的 require require静态 模块语句之间有什么区别?

例如:

module bar {
    requires java.compiler;
    requires static java.base;
}