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; }
广告