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

一个模块 是一个包的容器,每个模块都包含一个模块描述符,该描述符包含模块 名称模块 依赖关系, 这意味着其他模块的名称取决于该模块的名称以及它导出的软件包的名称,该软件包只能由依赖于该模块的模块使用。

module com.nhooo.app {
   /** Modules upon which the module com.nhooo.app depends on */
   requires com.nhooo.services;
   /** Packages exposed by this module which can be used by other modules */
   exports com.nhooo.app.util;
}

Java 9 Module提供了三种不同的编译模式:传统模式,单模块模式和多模块模式。

模块的编译方式:


  • 传统模式:可以在由所定义的汇编环境中启用--source--target,--release选项是小于或等于8。编译器的行为与Java 8(或更早版本)中的行为相同,在Java 8中,我们可以使用传统选项(类路径等),而不使用任何与模块相关的选项(--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选项指定主源目录。每个单独模块的源树都可以放置在主源目录下的自己的子目录中。