Java 9 中模块信息文件(module-info 文件)中的“requires”子句有什么作用?


**模块**是 **Java 9** 中引入的一个重要概念。通过使用这个概念,我们可以将代码划分为称为 **模块** 的更小的组件。因此,每个模块都有其自身的职责,并声明其对其他模块的依赖关系以正常工作。为了声明一个模块,我们需要将“**module-info.java**”文件包含到根源代码中。

"**module-info**" 文件中有一些类型的“**requires**”子句

1) requires <module>: 默认情况下,模块不知道 **module-path** 中存在的其他模块。因此,每次我们想要访问另一个模块时,都需要在我们的 module-info.java 中添加一行:“**requires**”。

module com.tutorialspoint.gui {
   requires com.tutorialspoint.model;
   requires java.desktop;
}

2) requires transitive <module>: 在我们的模块“**com.tutorialspoint.model**”的情况下:返回模块“**com.core**”导出的接口类型。因此,任何想要使用它们的模块也需要“**com.core**”来访问此第二个模块的类,而不会出现编译错误。**Java 9** 允许使用关键字“**transitive**”来指示通过传递性。用户“**com.tutorialspoint.model**”能够访问“**com.core**”,从而可以轻松进行实现更改。

module com.tutorialspoint.model {
   requires transitive com.core;
}

3) requires static <module>: 关键字“**requires static**”表示可选依赖的概念,例如,该模块是

  • 编译时强制性:如果模块在编译时的模块路径中不存在,则可能会引发编译错误。
  • 运行时可选:在应用程序启动时,在完整性检查阶段不会考虑该模块。即使模块不存在,应用程序也会启动。

例如,我们希望建议将应用程序的数据持久化到 **Oracle 数据库** 或 **H2 数据库** 中。

module com.tutorialspoint.model {
   requires static ojdbc
   requires static h2daabase.h2; 
}


更新于: 2020年4月28日

2K+ 浏览量

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告