本文将教你如何将Java程序打包成可执行JAR文件,并进一步生成Windows平台的原生可执行文件。我们会使用Java自带的jar
命令行工具创建JAR文件,然后借助Java 16+提供的jpackage
工具(位于jdk.jpackage
模块)生成可执行文件。
2. jar与jpackage命令基础
JAR文件本质上是基于ZIP格式的容器,用于存放编译后的Java类文件和其他资源。可执行JAR文件额外包含主类信息,该信息记录在清单文件(manifest)中。
注意:运行JAR文件必须安装Java运行环境(JRE),而原生可执行文件可直接在目标平台运行。为提供更好的用户体验,推荐为最终用户提供平台特定的可执行文件。
2.1 jar命令详解
创建JAR文件的基本语法:
jar cf jar-file input-file(s)
常用选项说明:
c
:创建新JAR文件f
:指定输出文件名m
:包含外部清单文件信息jar-file
:生成的JAR文件名(通常使用.jar
扩展名,但非强制)input-file(s)
:要打包的文件列表(支持*
通配符)
查看JAR内容语法:
jar tf jar-file
其中:
t
:列出文件内容f
:指定要检查的JAR文件
2.2 jpackage命令详解
jpackage
工具可将Java应用打包成平台特定的安装包。它通过jlink
生成自定义运行时镜像,最终生成独立的应用程序包。
使用jpackage
需要满足:
- 应用程序本身
- JDK环境
- 平台特定依赖(Windows需要WiX 3.0+)
基本用法示例:
jpackage --input . --main-jar MyAppn.jar
3. 创建可执行文件
下面分两步实现:先创建可执行JAR,再生成Windows可执行文件。
3.1 创建可执行JAR
创建可执行JAR需要两个关键元素:
- 包含
main()
方法的Java类(示例类名:MySampleGUIAppn
) - 清单文件(示例文件名:
MySampleGUIAppn.mf
)
清单文件内容(注意末尾必须换行):
Manifest-Version: 1.0
Main-Class: MySampleGUIAppn
打包命令示例:
jar cmf MySampleGUIAppn.mf MySampleGUIAppn.jar MySampleGUIAppn.class MySampleGUIAppn.java
验证JAR内容:
jar tf MySampleGUIAppn.jar
输出示例:
META-INF/
META-INF/MANIFEST.MF
MySampleGUIAppn.class
MySampleGUIAppn.java
运行方式:
- 命令行:
java -jar MySampleGUIAppn.jar
- GUI环境:双击JAR文件
3.2 生成Windows可执行文件
使用jpackage
将JAR转换为exe:
jpackage --input . --main-jar MySampleGUIAppn.jar
踩坑提示:命令执行需要时间,完成后会在当前目录生成exe文件(文件名包含清单中定义的版本号)。
Windows平台专属选项:
--type msi
:生成msi安装包(默认exe)--win-console
:启动时显示控制台窗口--win-shortcut
:在开始菜单创建快捷方式--win-dir-chooser
:允许用户自定义安装目录--win-menu --win-menu-group
:自定义开始菜单分组
4. 总结
本文系统讲解了JAR文件与可执行JAR的核心概念,并通过实战演示了将Java程序打包为JAR可执行文件,以及进一步生成Windows原生可执行文件的完整流程。掌握这些技能能显著提升Java应用的分发体验。
示例代码已上传至GitHub仓库,如有需要可参考完整实现。