Java模块化

129 阅读2分钟

Java从9版本开始引入了模块化的概念,也就是将代码和资源划分成一组相互依赖的模块,以便更加方便和可控地组织和维护代码。

模块化的概念

  • 模块: 是一组相关的类、接口、枚举和注解的集合,分离出应用程序中不同的代码部分。
  • 模块间的关系: 引用其他模块时,需要声明所依赖的模块,并遵循经过验证和匹配的模块关系。
  • 导出: 模块可以选择性地向其他模块公开其包中的类及其API。
  • 打包: 模块会被编译成一个独立的JAR包,并包含模块描述文件(module-info.java)。

模块描述文件

编写Java模块之前,我们需要创建模块描述文件module-info.java

module com.example.moduleA {
requires com.example.moduleB;
exports com.example.moduleA.api;
}
  • module关键字声明模块的名称,大括号中是模块的定义。
  • requires声明所需的模块,Java 9 之前也可以使用import关键字引入其他包中的类,但它们不能实现模块化的目标。
  • exports导出模块的包,允许另一个模块访问它的公共API。

使用模块化

模块化可以帮助我们更好地组织代码,但我们仍然需要一些约定来使用它:

  1. javac编译参数中使用--module-source-path指定模块化源代码的根目录。
  2. java执行参数中使用--module-path来指定模块路径,它会在指定的目录中查找模块化JAR包。
  3. 启动时指定主模块的名称,使用-m参数。

例如:

# 编译源码
javac --module-source-path src -d out

# 运行命令
java --module-path out -m com.example.moduleA/com.example.moduleA.Main

总结

Java模块化提供了更好的代码组织和维护,同时还有助于模块间的隔离和控制。虽然现有的应用程序并不一定需要完全使用模块化,但是了解它的原理和使用方式,可以帮助我们更好地管理和开发代码。