在模块声明中,需要静态和要求之间有什么区别
2022-09-01 20:58:52
在模块声明中,需要静态模块语句和需要静态模块语句之间有什么区别?
例如:
module bar {
requires java.compiler;
requires static java.base;
}
在模块声明中,需要静态模块语句和需要静态模块语句之间有什么区别?
例如:
module bar {
requires java.compiler;
requires static java.base;
}
子句表示在编译和运行时需要所需的模块。因此,当模块系统在模块解析期间(处理模块描述符和解析依赖关系的阶段)遇到这样的子句时,它会搜索可观察模块的范围(JDK 和模块路径上的模块),如果找不到模块,则会引发错误。requires
子句表示在运行时可选的依赖项。这意味着在编译时,模块系统的行为与上述完全相同。requires static
另一方面,在运行时,它主要忽略子句。如果它遇到一个,它不会解决它。这意味着,如果一个可观察的模块只被引用,它不会进入模块图!起初这可能有点令人惊讶。另一方面,如果模块以其他方式进入图(其他模块需要,使用 --add-modules
手动添加,通过服务绑定绘制),则所有对其具有可选依赖项的模块都可以读取它。requires static
requires static
两者之间的主要区别在于
requires static foo.module;
在编译期间的静态阶段,依赖性是强制性的,但在动态阶段,在执行期间是可选的,而另一方面
requires bar.module;
添加它是为了声明模块在编译时和运行时都依赖于其他一些模块(按名称)。