Java 9 中 module-info 文件中的"requires"子句有什么用?

javaobject oriented programmingprogramming更新于 2025/10/31 13:32:17

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

module-info 中有几种类型的"requires"子句文件

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

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

2) 需要传递性 <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) 需要静态 <module>:关键字"requires static"代表可选依赖的概念,这样的模块是:

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

例如,我们想要提出应用程序数据的持久性,无论是在oracle 数据库 还是h2database中。

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

相关文章


有用资源