jmod工具用于将编译后的类、资源、本地库等打包为.jmod文件,供编译期或jlink链接期使用,不可直接运行。需基于含module-info.class的模块化JAR或目录,通过jmod create命令生成,支持--main-class、--cmds、--libs等参数定制内容。

Java 使用 jmod 工具打包模块文件,核心是把已编译的类、资源、本地库等整合成一个 .jmod 文件,供编译期或链接期(如 jlink)使用。它不是运行时直接执行的格式,也不能用 java -jar 运行。
准备前提:必须有编译好的 class 文件或模块化 JAR
确保你已完成以下任一准备:
- 已通过
javac -d bin ...编译出完整的模块目录结构(含module-info.class) - 或已打包好模块化 JAR(即含
module-info.class的 JAR,用jar --create --module-version创建)
基本 jmod create 命令语法
最常用形式如下:
jmod create [选项] 输出.jmod --class-path 输入.jar 或 目录
关键点:
立即学习“Java免费学习笔记(深入)”;
-
--class-path指定源内容:可以是单个模块化 JAR,也可以是包含完整模块结构的目录(如bin/) - 输出文件扩展名必须为
.jmod - 若输入目录中含
module-info.class,jmod会自动识别模块名和版本
常用可选参数说明
根据需要添加以下参数增强功能:
-
--main-class <类名>:指定模块主类(用于后续jlink启动时默认入口) -
--cmds <目录>:打包命令行工具(如.bat或.sh脚本),放入/bin子路径 -
--libs <目录>:打包本地库(如.dll或.so),放入/lib子路径 -
--header-files <目录>:打包 JNI 头文件(如jni.h相关),用于开发场景 -
--config-files <目录>:打包配置文件(如logging.properties),放入/conf
实际操作示例
假设你有模块化 JAR hello.jar(含 module-info.class 和主类 com.example.Main):
jmod create --class-path hello.jar --main-class com.example.Main hello.jmod
若还需附带本地库和脚本:
jmod create --class-path hello.jar \ --main-class com.example.Main \ --cmds scripts/ \ --libs native/ \ hello.jmod
执行后生成 hello.jmod,可用 jmod list hello.jmod 查看内容。
注意:.jmod 文件只能用于 --module-path 编译或 jlink 构建自定义运行时,不能直接运行;如需运行,应先用 jlink 生成精简 JRE,再执行其中的 java。


















