java 9模块化应用需用--module-path指定模块路径、-m指定主模块,要求含module-info.java并已编译;支持jar包或目录结构,依赖模块须同在模块路径中。

Java 9 引入模块系统(JPMS),要使用 java 命令运行模块化应用,关键在于正确指定模块路径、主模块名和主类(如果未在 module-info.java 中声明 main-class 属性)。
确保项目已编译为模块
你的项目必须包含 module-info.java 文件,并已用 javac --module-source-path 或按模块目录结构编译。生成的模块内容通常放在 mods/ 目录或 JAR 包中(如 hello.world.jar),且该 JAR 的 META-INF/MANIFEST.MF 可选包含 Automatic-Module-Name,但推荐显式命名模块。
使用 --module-path 和 -m 运行模块
这是最常用方式:告诉 JVM 模块所在位置,并指定启动哪个模块。
-
--module-path(或简写 -p):指定模块所在的目录或 JAR 文件路径,多个路径用
:(macOS/Linux)或;(Windows)分隔 -
-m(或 --module):格式为
模块名/主类全限定名;若模块的module-info.java中已声明main-class,可省略斜杠后的类名
例如:
java --module-path mods --module hello.world前提是 mods/hello.world.jar 中的 module-info.java 包含:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
requires java.base;
exports hello;
main-class hello.Main;
}
运行未打包的模块目录(多模块开发时常用)
如果你把每个模块编译到独立目录(如 mods/hello.world),可直接指向该目录:
注意:此时 mods 是父目录,JVM 会自动识别其下的子目录为命名模块(需含 module-info.class)。
处理模块依赖与服务加载
若应用依赖其他模块(如自定义模块 util.lib),确保它们都在 --module-path 中:
若使用 ServiceLoader,还需在 module-info.java 中 uses 接口、provides ... with ... 实现类,并确保服务模块也在模块路径中。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










