📜  Java9 Module系统

📅  最后修改于: 2020-10-14 00:49:46             🧑  作者: Mango

Java 9模块系统

Java模块系统是Java 9版本的一项重大更改。 Java添加了此功能,以将Java软件包和代码收集到称为模块的单个单元中。

在Java的早期版本中,没有用于创建模块化Java应用程序的模块的概念,这就是为什么应用程序的大小增加且难以移动的原因。甚至JDK本身的大小也太重,在Java 8中,rt.jar文件的大小约为64MB。

为了应对这种情况,Java 9将JDK重组为模块集,以便我们只能在项目中使用所需的模块。

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

模块系统包括以下给出的各种工具和选项。

  • 包括Java工具javac,jlink和java的各种选项,我们可以在其中指定定位到模块位置的模块路径。
  • 引入了模块化JAR文件。此JAR在其根文件夹中包含module-info.class文件。
  • 引入了JMOD格式,它是一种类似于JAR的打包格式,但它可以包含本机代码和配置文件。
  • JDK和JRE都经过重构以容纳模块。它提高了性能,安全性和可维护性。
  • Java为模块,类和资源的命名定义了新的URI方案。

Java 9模块化JDK

Java 9模块

模块是Java程序或软件的集合。要描述模块,需要Java文件module-info.java。此文件也称为模块描述符,它定义了以下内容

  • 模块名称
  • 它出口什么
  • 需要什么

模块名称

它是模块的名称,应遵循反向域模式。就像我们为包命名一样,例如com.javatpoint。

如何创建Java模块

创建Java模块需要执行以下步骤。

  • 创建目录结构
  • 创建一个模块声明器
  • Java源代码

创建目录结构

要创建模块,建议遵循给定的目录结构,该目录结构与反向域模式相同,我们使用Java创建包/项目结构。

注意:包含模块源的目录的名称应等于模块的名称,例如com.javatpoint。

在该文件内创建一个文件module-info.java,使用模块标识符声明一个模块,并提供与包含它的目录名称相同的模块名称。在我们的例子中,目录名称为com.javatpoint。

module com.javatpoint{

}

如果模块主体没有任何模块依赖性,则将其保留为空。使用module-info.java名称将此文件保存在src / com.javatpoint中。

Java源代码

现在,创建一个Java文件来编译和执行模块。在我们的示例中,我们有一个Hello.java文件,其中包含以下代码。

class Hello{
public static void main(String[] args){
System.out.println("Hello from the Java module");
}
}

使用Hello.java名称将此文件保存在src / com.javatpoint / com / javatpoint /中。

编译Java模块

要编译模块,请使用以下命令。

javac -d mods --module-source-path src/ --module com.javatpoint

编译后,它将创建一个包含以下结构的新目录。

现在,我们有了一个可以运行的已编译模块。

运行模块

要运行已编译的模块,请使用以下命令。

java --module-path mods/ --module com.javatpoint/com.javatpoint.Hello

输出:

Hello from the Java module

好了,我们已经成功创建,编译和执行了Java模块。

查看已编译的模块描述符

要查看已编译的模块描述符,请使用以下命令。

javap mods/com.javatpoint/module-info.class

此命令将向控制台显示以下代码。

Compiled from "module-info.java"
module com.javatpoint {
  requires java.base;
}

瞧,我们创建了一个空模块,但是它包含一个java.base模块。为什么?因为所有Java模块都链接到java.base模块,所以它是默认模块。