java 9模块应用需用--module-path和--module运行:先指定模块路径,再以“模块名/主类”或仅“模块名”(若module-info.java声明了main-class)启动。

Java 9 引入模块系统(JPMS)后,运行主模块应用程序不能只用 java -jar,而需明确指定模块路径、主模块名和主类(或通过 module-info.java 声明 main-class 属性)。关键在于用 --module-path(或 -p)指定模块位置,并用 --module(或 -m)指定“主模块/主类”格式。
确认模块结构和编译结果
确保项目已按模块组织:包含 module-info.java,且已成功编译为模块化 JAR 或目录结构。例如:
- 模块名是
com.example.hello -
module-info.java中声明了exports和requires(如需要) - 主类为
com.example.hello.Main,且该类含public static void main(String[] args) - 编译输出在
mods/com.example.hello目录下(或打包为hello.jar)
运行未打包的模块目录
若模块以目录形式存在(如 mods/ 下有 com.example.hello/),执行:
java --module-path mods --module com.example.hello/com.example.hello.Main
说明:
-
--module-path mods:告诉 JVM 模块根目录(可多个路径,用:(Linux/macOS)或;(Windows)分隔) -
--module com.example.hello/com.example.hello.Main:格式为模块名/主类全限定名;若module-info.java已用main-class属性声明,则可简写为--module com.example.hello
运行模块化 JAR 文件
若已将模块打包为 hello.jar(且其 META-INF/MANIFEST.MF 包含 Automatic-Module-Name 或已用 jmod 构建),运行方式相同:
java --module-path hello.jar --module com.example.hello/com.example.hello.Main
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
注意:
- JAR 必须是模块化 JAR(含
module-info.class),普通 JAR 不支持--module - 如果 JAR 的
MANIFEST.MF中定义了Main-Class: com.example.hello.Main但没有模块信息,它仍被视为自动模块,此时必须显式指定主类路径,不能省略/主类名
简化启动:在 module-info.java 中声明 main-class
在 module-info.java 中添加属性,可避免每次命令行都写主类:
module com.example.hello {<br> requires java.base;<br> exports com.example.hello;<br> main-class com.example.hello.Main;<br>}
之后只需运行:
java --module-path mods --module com.example.hello
JVM 会自动查找并调用该模块中声明的主类。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










