模块声明中 需要 和 需要静态 模块语句的区别是什么?< / p>
例如:
module bar {
requires java.compiler;
requires static java.base;
}
答案 0 :(得分:15)
requires
子句表示在编译和运行时需要所需的模块。因此,当模块系统在module resolution期间(处理模块描述符和解析依赖关系的阶段)遇到这样的子句时,它会搜索可观察模块的范围(JDK中的模块和模块路径上)和如果它找不到模块,则会抛出错误。
requires static
条款表达a dependency that is optional at run time。这意味着在编译时模块系统的行为完全如上所述。
另一方面,在运行时,它主要忽略requires static
个子句。如果遇到一个,无法解决。这意味着,如果可观察模块仅以requires static
引用,则它不会进入模块图!起初这可能有点令人惊讶。另一方面,如果模块以某种其他方式(由added manually with --add-modules
引入的某个其他模块service binding所需)进入图形,则所有模块都具有可选的依赖性可以read它。
答案 1 :(得分:2)
两者之间的主要区别在于
requires static foo.module;
在静态阶段,在编译期间,是必需的,但在动态阶段是可选的,在执行期间是另一方面
requires bar.module;
添加以声明模块在编译时和运行时依赖于某些其他模块。