📅  最后修改于: 2023-12-03 15:31:35.551000             🧑  作者: Mango
Java 9 Module 系统是 Java 9 中引入的一项新特性。本文将介绍 Java 9 Module 系统的概念、目的、如何使用,并提供一些有用的示例代码。
Java 9 Module 系统是面向模块化编程的一种解决方案。它将 Java 应用程序分解为模块,每个模块都具有清晰的 API 和边界,并可以访问其他模块。
从历史上看,Java 应用程序一直以 JAR(Java Archive)文件作为最小部署单元。这种部署方式非常灵活,但是也存在一些问题。例如,应用程序的类路径会变得非常复杂,冲突会频繁发生,不易管理和维护。
Java 9 Module 系统通过模块化应用程序代码,可解决上述问题。
Java 9 Module 系统的主要目的是提高 Java 应用程序的安全性、可维护性和可控性。Module 系统可以实现以下目标:
定义一个模块需要创建一个 module-info.java 文件,并在其中声明该模块的名称、依赖关系和导出包。
例如,下面是一个名为 com.mycompany.mymodule 的模块的 module-info.java 文件:
module com.mycompany.mymodule {
requires java.base;
requires com.google.gson;
exports com.mycompany.mymodule.api;
}
在上面的示例中,我们定义了一个名为 com.mycompany.mymodule 的模块。它声明了它对 java.base 和 com.google.gson 的依赖,并且导出了 com.mycompany.mymodule.api 包。
我们可以使用以下命令编译模块代码:
javac -d [output_directory] module-info.java [source_files]
要启动使用模块的应用程序,我们必须指定应用程序的模块路径和主类。Module 路径是存储所有模块的目录或 JAR 文件的列表,可以通过以下命令指定:
java --module-path [module_path] -m [module_name]/[main_class]
例如,要以 com.mycompany.mymodule 模块为示例运行应用程序 MyApplication,可以使用以下命令:
java --module-path [module_path] -m com.mycompany.mymodule/com.mycompany.mymodule.MyApplication
在上面的示例中,我们假设 MyApplication 类是 com.mycompany.mymodule 模块中的主类。
Java 9 Module 系统与传统的类路径是兼容的。如果我们运行没有模块定义的代码,则它将在类路径上查找所有的 JAR 文件。
以下是一个简单的示例,展示如何编写和使用模块。
一个名为 MyLibrary 的模块,提供了一个公共 API( com.mycompany.mylibrary.api 包),实现了该 API 的私有实现( com.mycompany.mylibrary.impl 包)。
module-info.java
module com.mycompany.mylibrary {
exports com.mycompany.mylibrary.api;
}
MyClass.java
package com.mycompany.mylibrary.impl;
import com.mycompany.mylibrary.api.MyInterface;
public class MyClass implements MyInterface {
public void doSomething() {
System.out.println("MyClass.doSomething()");
}
}
一个基于 MyLibrary 模块的简单应用程序:
module-info.java
module com.mycompany.myapp {
requires com.mycompany.mylibrary;
}
MyApplication.java
package com.mycompany.myapp;
import com.mycompany.mylibrary.api.MyInterface;
import com.mycompany.mylibrary.impl.MyClass;
public class MyApplication {
public static void main(String[] args) {
MyInterface myObj = new MyClass();
myObj.doSomething();
}
}
现在我们可以使用以下命令编译和运行 MyApplication 模块:
javac -d [output_directory] MyApplication.java
javac -d [output_directory] MyClass.java
javac -d [output_directory] module-info.java
javac -d [output_directory] com.mycompany.mylibrary.api/*.java
javac -d [output_directory] com.mycompany.mylibrary.impl/*.java
java --module-path [module_path] -m com.mycompany.myapp/com.mycompany.myapp.MyApplication
Java 9 Module 系统提供了一种全新的方式来构建和管理 Java 应用程序。模块化程序设计能够提供更好的安全性、可维护性和可控性,并且使开发者能够构建更具重用性和可扩展性的应用程序。