Java 9 中模块有哪些不同的编译模式?

javaobject oriented programmingprogramming

模块是包的容器,每个模块包含一个模块描述符,其中包括模块名称模块依赖项,这意味着其他模块的名称依赖于它导出的包的名称,这些包只能由依赖于它的模块使用。

模块 com.tutorialspoint.app {
   /** 模块 com.tutorialspoint.app 所依赖的模块 */
   requires com.tutorialspoint.services;
   /** 此模块公开的可供其他模块使用的包 */
   exports com.tutorialspoint.app.util;

Java 9 模块提供三种不同的编译模式:旧模式、单模块模式和多模块模式。

模块的编译模式:

  • 旧模式:当 --source--target--release 选项定义的编译环境小于或等于 8 时,可以启用该模式。编译器的行为与 Java 8(或更早版本)中的行为相同,我们可以使用传统选项(classpath 等)而不是任何模块相关选项(--module-path)。在此模式下,我们的代码在运行时作为未命名的 模块 运行。
  • 单模块模式:当编译环境为 9或更高版本且未使用 --module-source-path 选项时,可以启用该模式。在此模式下,代码在传统的包层次目录树中构建。代码有一个 module-info.java 文件,并在 modulepath 而不是 classpath 上运行。在此结构中,我们可以将 module-info.java 文件直接放在 src 目录下。我们不能在同一个目录树中拥有多个 module-info.java 文件,因此它被称为单模块模式
  • 多模块模式:当编译环境为 9 或更高版本并使用--module-source-path 选项时,可以启用该模式。在此模式下,我们将多个模块放在同一个源目录下。在编译期间,可以使用--module-source-path 选项指定主源目录。每个单独模块的源树都可以放在主源目录下自己的子目录中。

相关文章