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。
使用模块化
模块化可以帮助我们更好地组织代码,但我们仍然需要一些约定来使用它:
- 在
javac编译参数中使用--module-source-path指定模块化源代码的根目录。 - 在
java执行参数中使用--module-path来指定模块路径,它会在指定的目录中查找模块化JAR包。 - 启动时指定主模块的名称,使用
-m参数。
例如:
# 编译源码
javac --module-source-path src -d out
# 运行命令
java --module-path out -m com.example.moduleA/com.example.moduleA.Main
总结
Java模块化提供了更好的代码组织和维护,同时还有助于模块间的隔离和控制。虽然现有的应用程序并不一定需要完全使用模块化,但是了解它的原理和使用方式,可以帮助我们更好地管理和开发代码。