什么是需求和需要静态的模块声明之间的区别

时间:2017-10-03 04:37:14

标签: java java-9 java-module module-info

模块声明中 需要 需要静态 模块语句的区别是什么?< / p>

例如:

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

2 个答案:

答案 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;

添加以声明模块在编译时和运行时依赖于某些其他模块