Java 模块——Java 平台模块系统

原文:https://www.studytonight.com/java-9/java-modules

Java 平台模块系统是 Java 9 版本新增的功能。它允许我们将相关的包和文件收集到一个名为模块的单元中。

在 Java 9 之前,没有模块系统的概念,导致应用规模增加,难以移动。但是在 Java 9 中,整个 JDK 或者 Java APIs 已经被重组为一组模块,这样我们就可以只使用我们项目所需的模块。Java 模块系统是 Java 包之上的更高层次的聚合。

什么是 Java 模块?

Java modules 是对 Java 核心平台中可用的 Java APIs 进行聚合或分类的一种方式,因此当您开发一个新的 Java 应用时,您只能在项目中包含所需的 Java 库,而不是拥有完整的 Java 平台 API。

Java 模块可以是系统模块应用模块,与 Java Core 相关的模块如 Java SE 和 JDK 被称为系统模块,被设计为使用模块并在编译的模块信息类中定义的模块被称为应用模块。

由于 JDK 9 是基于模块化方法构建的,我们可以通过使用终端或 cmd 中的 - list-modules 命令来检查内置模块。

$ java --list-modules

上面的命令将填充如下所示的结果,显示可用的模块。

java.base@9.0.8
java.compiler@9.0.8
java.datatransfer@9.0.8
java.desktop@9.0.8
java.instrument@9.0.8
java.logging@9.0.8
java.management@9.0.8
java.management.rmi@9.0.8
java.naming@9.0.8
java.net.http@9.0.8
java.prefs@9.0.8
java.rmi@9.0.8
java.scripting@9.0.8
...

根据 Java 规范,模块化 Java SE 平台的关键目标是

  • 可靠的配置
  • 强封装
  • 可扩展的 Java 平台
  • 更高的平台完整性
  • 提高性能

除了 JDK,Java 还允许我们创建自己的模块,这样我们就可以开发基于模块的应用。

使用模块,将 jar 文件包含到 modulepath 中,而不是类路径中。添加到类路径中的模块化 jar 文件是一个普通的 jar 文件,而模块信息类文件将被忽略。

如何创建自己的模块?

除了内置模块,Java 还允许我们创建用户定义的模块。在这里,我们将学习使用这些简单的步骤来创建我们自己的 Java 模块:

1.创建一个代表我们模块的目录。

2.创建一个模块描述文件作为模块信息

3.Java 源代码文件。

例如,让我们创建一个包含 java.modules 的文件夹 java9 ,它本身包含一个module-info.java(模块描述)文件和一个作为Hello.java的 java 源文件。

将这些文件排列到这个目录结构中。

java9/
    -java.modules
        -Hello.java
        -module-info.java

//Hello.java

package com.studytonight;

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, Modules!");
    }
}

模块-描述文件(module-info.java)

module java.modules {
    requires java.base;  

}

模块描述符文件指定了以下几点:

  • 模块的名称
  • 模块的依赖关系
  • 模块的可见性:指定它显式地提供给其他模块的包。
  • 它提供的服务
  • it 消费者的服务
  • 对其他模块的反射权限

模块信息文件中的模块名应该与模块名目录(java.modules)相同,参见上面的目录结构。

如何编译模块化 Java 源文件?

我们使用以下命令来编译我们的 Java 模块。

javac --module-source-path java9/ -d java9/module-src -m java.modules

-模块-源-路径是表示模块位置的标志。因为我们的模块位于 java9 文件夹中,所以我们在命令中使用了 java9。

-d 代表存储我们编译的模块文件的目录。模块-src 是一个目录,其中。将存储类文件。

-m 指向模块名称。

成功编译代码后。它将被存储在一个单独的目录中,如果我们看到它的目录结构,那么它看起来像:

java9/
    -java.modules
        -Hello.java
        -module-info.java
    -module-src
        -java.modules
            -com
                -studytonight
                        -Hello.class
            -module-info.class

如何执行(运行)Java 模块?

在成功编译了 Java 代码之后,现在让我们运行代码并检查我们的代码是否产生了期望的结果。使用下面的命令。

java --module-path java9/module-src/ -m java.modules/com.studytonight.Hello

成功执行该模块后,我们会得到以下结果:

大家好,模块们!