本文将教你如何将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需要两个关键元素:

  1. 包含main()方法的Java类(示例类名:MySampleGUIAppn
  2. 清单文件(示例文件名: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仓库,如有需要可参考完整实现。


原始标题:Guide to Creating Jar Executables and Windows Executables from Java