Java 9模块系统

本文概述

  • Java 9模块化JDK
  • Java 9模块
  • 模块名称
  • 如何创建Java模块
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 9模块 模块是Java程序或软件的集合。要描述模块, 需要Java文件module-info.java。此文件也称为模块描述符, 它定义了以下内容
  • 模块名称
  • 它出口什么
  • 需要什么
Java 9模块系统

文章图片
模块名称 它是模块的名称, 应遵循反向域模式。就像我们为包裹命名一样, 例如com.srcmini。
如何创建Java模块 创建Java模块需要执行以下步骤。
  • 创建目录结构
  • 创建一个模块声明器
  • Java源代码
创建目录结构
要创建模块, 建议遵循给定的目录结构, 该目录结构与反向域模式相同, 我们确实使用Java创建了包/项目结构。
注意:包含模块来源的目录名称应与模块名称相同, 例如com.srcmini。
Java 9模块系统

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

如果模块主体没有任何模块依赖性, 则将其保留为空。使用module-info.java名称将此文件保存在src / com.srcmini中。
Java源代码
现在, 创建一个Java文件来编译和执行模块。在我们的示例中, 我们有一个Hello.java文件, 其中包含以下代码。
class Hello{ public static void main(String[] args){ System.out.println("Hello from the Java module"); } }

使用Hello.java名称将此文件保存在src / com.srcmini / com / srcmini /中。
编译Java模块
要编译模块, 请使用以下命令。
javac -d mods --module-source-path src/ --module com.srcmini

编译后, 它将创建一个包含以下结构的新目录。
Java 9模块系统

文章图片
现在, 我们有了一个可以运行的已编译模块。
运行模块
要运行已编译的模块, 请使用以下命令。
java --module-path mods/ --module com.srcmini/com.srcmini.Hello

输出:
Hello from the Java module

好了, 我们已经成功创建, 编译和执行了Java模块。
查看已编译的模块描述符
要查看已编译的模块描述符, 请使用以下命令。
javap mods/com.srcmini/module-info.class

此命令将向控制台显示以下代码。
Compiled from "module-info.java" module com.srcmini { requires java.base; }

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

    推荐阅读