Java 程序本身不能直接编译成一个纯粹的 .exe 文件。 因为Java的核心思想是“一次编写,到处运行”(Write Once, Run Anywhere)。.exe文件是Windows平台特有的可执行文件格式。

我们通常说的“导出exe”,其实是指将Java程序和它所依赖的JRE(Java运行环境)打包在一起,生成一个可以在Windows上直接点击运行的、带有图标的可执行文件,这个.exe文件本质上是一个“启动器”或“打包器”,它会自动加载内部的JRE来运行你的Java代码。
下面我将介绍几种主流的方法,从最简单到最专业。
使用工具打包(最推荐,最简单)
这是最常用、最简单的方法,适合绝大多数开发者,我们以 Launch4j 为例,这是一个非常经典且好用的工具。
第1步:准备工作
- 编译你的Java程序:确保你的Java项目已经编译完成,生成了
.class文件,并且可以正常通过java -cp命令运行。 - 打包成JAR文件:这是打包成
.exe的前提,你需要将所有.class文件和依赖的第三方库(.jar)打包成一个可执行的JAR文件。- 如果你使用Maven或Gradle,构建工具会自动帮你处理。
- 如果你手动管理,可以使用以下命令:
# 创建一个目录存放所有文件 mkdir myapp_lib # 将你的主类编译后的.class文件和所有依赖的.jar文件复制到myapp_lib # 假设你的主类是 com.example.Main jar cvfe MyApp.jar com.example.Main -C myapp_lib .
-c: 创建新的JAR档案-v: 生成详细输出-f: 指定JAR文件名-e: 指定入口点(主类的全限定名)-C myapp_lib .: 表示进入myapp_lib目录,并将其中所有内容打包到JAR中。
第2步:使用Launch4j打包
-
下载并安装Launch4j:从官网 http://launch4j.sourceforge.net/ 下载并安装。
(图片来源网络,侵删) -
配置Launch4j:
- 打开
launch4j.exe。 - "Basic" 标签页:
outfile: 选择你希望生成的.exe文件的路径和名称(C:\MyApp\MyApp.exe)。dontWrapJar: 不要勾选,我们就是要包装JAR文件。jar: 点击按钮,选择你刚刚生成的MyApp.jar文件。icon: 选择一个.ico格式的图标文件,给你的程序一个自定义图标。headerType: 通常选择gui(图形界面)或console(控制台),如果你的程序有命令行窗口,选console;如果不想看到黑框,选gui。
- "JRE" 标签页:
Min. JRE version: 设置你的程序最低需要的Java版本(8.0_321)。bundled JRE path: 这是关键! 点击按钮,选择你提前下载好的、与你的程序兼容的JRE的根目录(C:\Program Files\Java\jdk-11.0.13或者C:\Java\jre-1.8.0_321),Launch4j会将这个JRE一起打包进.exe文件中,这样目标机器上就不需要安装Java了。
- "Preferences" 标签页:
Priority: 可以设置进程优先级。Stay alive: 如果你的程序运行后窗口会关闭,可以勾选此项,让程序窗口保持打开。Variables: 可以设置传递给JVM的参数,-Xmx512m(设置最大堆内存)。
- 打开
-
生成
.exe文件:- 点击工具栏上的保存图标(或
File -> Save),保存你的配置文件(.xml或.launch4j)。 - 点击工具栏上的齿轮图标(或
Project -> Build Wrapper),Launch4j会开始打包。 - 完成后,你就能在指定的
outfile路径下找到你的MyApp.exe文件了。
- 点击工具栏上的保存图标(或
第3步:如何打开/运行
生成的 .exe 文件可以直接通过以下方式运行:
- 双击运行:直接像打开普通软件一样双击
MyApp.exe。 - 命令行运行:在命令行中切换到
.exe文件所在的目录,然后输入MyApp.exe并回车。 - 右键运行:右键点击
.exe文件,选择“打开”。
使用高级打包工具(更现代,功能更强)
Launch4j比较底层,现在有很多更现代的打包工具,它们集成了更多功能,比如创建安装程序、自动下载JRE等。

jpackage (Java 14+ 自带)
这是Oracle官方推出的打包工具,非常强大,可以直接生成安装程序(.msi)或便携式应用(.exe)。
优点:
- 官方支持,持续更新。
- 功能强大,支持多种平台(Windows, macOS, Linux)。
- 生成的安装程序体验更好。
缺点:
- 需要较新版本的JDK(14+)。
基本用法示例:
假设你的JAR文件是 MyApp.jar,主类是 com.example.Main。
# 在Windows命令行中运行 jpackage --type exe --input . --dest . --name "My Awesome App" --main-jar MyApp.jar --main-class com.example.Main --app-version "1.0" --vendor "My Company" --win-shortcut --win-menu --win-dir-chooser
--type exe: 生成便携式.exe文件。--input .: 指定输入目录(包含JAR和资源)。--dest .: 指定输出目录。--name "My Awesome App": 应用显示名称。--main-jar MyApp.jar: 主JAR文件。--main-class com.example.Main: 程序入口点。--win-shortcut: 创建桌面快捷方式。--win-menu: 添加到开始菜单。--win-dir-chooser: 安装时允许用户选择安装目录。
运行后,它会生成一个 My Awesome App-1.0.exe 文件,你可以直接运行它来安装你的应用。
GraalVM Native Image (编译成本地代码)
这是最“硬核”的方法,它可以将Java代码真正编译成一个原生的、不依赖JRE的 .exe 文件。
优点:
- 极致的性能:启动速度极快,内存占用极低。
- 真正的单文件:生成的
.exe文件包含了所有运行时依赖,无需JRE。
缺点:
- 配置极其复杂:需要处理反射、JNI等特殊代码。
- 编译时间长。
- 不是所有Java库都支持。
- 文件体积可能较大。
如何打开:
生成的 .exe 文件和普通的Windows可执行文件一样,直接双击或命令行运行即可,它已经是一个独立的程序了。
总结与对比
| 方法 | 原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| Launch4j | 打包JAR + JRE成一个EXE启动器 | 简单易用,成熟稳定,支持旧版Java | 功能相对单一,JRE文件会增大EXE体积 | 需要快速生成一个独立的、可分发的EXE文件,不追求极致性能。 |
| jpackage | 官方工具,生成EXE或安装程序 | 功能强大,官方支持,生成体验好(如安装向导) | 需要JDK 14+,配置稍复杂 | 希望生成专业的、类似商业软件的安装程序。 |
| GraalVM Native Image | 将Java代码编译成原生机器码 | 性能极致,启动快,内存占用低,无需JRE | 配置复杂,兼容性问题,编译时间长 | 对性能有极致要求的场景,如微服务、命令行工具、高频交易等。 |
给初学者的建议
如果你是刚开始学习Java,并且想让你的朋友或家人在不安装Java的情况下运行你的程序,使用Launch4j是最简单、最直接的方法,它完美地平衡了易用性和功能性。
记住核心流程:Java代码 -> 编译成.class -> 打包成.jar -> 使用Launch4j等工具将.jar和JRE打包成.exe。
