Java 不是直接导出成 .exe 文件的
最重要的一点是:Java 程序的本质不是 .exe 文件。

- Java 程序的运行方式:Java 代码被编译成一种叫做 字节码 的中间格式,文件扩展名是
.class,这个.class文件可以在任何安装了 Java 虚拟机 的操作系统上运行(如 Windows, macOS, Linux)。 .exe文件的作用:.exe是 Windows 系统下的 可执行文件,它通常是原生代码(如 C/C++)编译而成的,直接由 Windows 操作系统加载和执行。
为什么我们总听说要把 Java 程序打包成 .exe 呢?
这是因为最终用户(你的客户)通常没有安装 JDK 或 JRE,他们不知道如何通过命令行运行 Java 程序,我们所谓的“导出 .exe”,其实是创建一个 “启动器” 或 “包装器”,这个 .exe 文件本身并不包含你的 Java 代码,它只是一个“外壳”,它的作用是:
- 检查目标电脑是否安装了 JRE。
- 如果没有,可以引导用户下载或自带一个 JRE。
- 如果有,它会调用
java.exe来运行你的.jar文件。
最主流和推荐的方式(导出为可执行的 .jar 文件)
这是 Java 社区最标准、最跨平台的方式,你的程序最终被打包成一个 .jar 文件,用户双击即可运行(前提是他们系统关联了 .jar 文件)。
步骤 1:将你的 Java 项目打包成 .jar 文件
你需要一个清单文件来告诉 JVM 程序的入口点(main 方法)。

-
创建
MANIFEST.MF文件 在你的项目src目录下创建一个META-INF文件夹,并在里面创建一个MANIFEST.MF文件,内容如下:Manifest-Version: 1.0 Main-Class: com.yourcompany.yourproject.MainApplication
注意:
Main-Class后面跟的是你的主类的 完整类名(包括包路径)。- 文件末尾必须有一个空行,否则在某些情况下可能无法识别。
-
使用 IDE(如 IntelliJ IDEA 或 Eclipse)导出 以 IntelliJ IDEA 为例:
- 点击
File->Project Structure... - 选择
Artifacts,点击 号,选择JAR->From modules with dependencies。 - 在弹出的窗口中:
Main Class: 选择你的主类。Build on make: 勾选。Manifest: 确保选择了你刚才创建的MANIFEST.MF文件。
- 点击
OK,Apply。 - 回到主界面,点击
Build->Build Artifacts...,选择你刚刚创建的 artifact,然后点击Build。 - 构建成功后,你会在
out/artifacts目录下找到生成的.jar文件。
- 点击
-
使用 Maven/Gradle(专业项目推荐) 如果你使用 Maven,可以在
pom.xml中配置maven-assembly-plugin或maven-shade-plugin来生成可执行的 JAR,Gradle 则可以使用application插件和shadow插件。
(图片来源网络,侵删)
步骤 2:如何运行(打开)生成的 .jar 文件
- 直接双击:在 Windows 系统中,JRE 安装正确且
.jar文件关联了 Java,双击即可运行。 - 命令行运行:打开命令提示符(CMD)或 PowerShell,进入
.jar文件所在的目录,然后输入:java -jar YourProgramName.jar
创建一个 .exe 包装器(真正意义上的“导出 exe”)
如果你必须提供一个 .exe 文件(为了满足特定用户习惯或简化分发),可以使用第三方工具来创建一个包装器。
工具推荐:Launch4j
Launch4j 是一个免费的、跨平台的工具,专门用于将 Java 启动程序打包成 Windows 原生可执行文件(.exe)。
使用 Launch4j 的步骤:
-
准备工作:
- 你已经按照 方案一 的步骤,成功生成了你的可执行
.jar文件(YourProgramName.jar)。 - 下载并安装 Launch4j。
- 你已经按照 方案一 的步骤,成功生成了你的可执行
-
配置 Launch4j:
- 打开 Launch4j,你会看到一个图形化配置界面。
- Basic settings (基本设置):
Output file: 选择你希望生成的.exe文件的名称和保存位置(YourProgram.exe)。Jar: 点击 "Browse...",选择你刚刚生成的YourProgramName.jar文件。Icon: (可选)为你的.exe文件设置一个自定义图标。Don't wrap JAR: 勾选此项,这意味着 Launch4j 会创建一个启动器,而不是把 JAR 内容解压到 exe 里,这样 exe 文件体积会小很多。
- JRE (Java 运行环境设置):
Min. JRE version: 设置你的程序最低需要的 JRE 版本(8.0_321)。Path: 你可以在这里指定一个包含 JRE 的文件夹路径,当用户运行你的.exe时,它会优先使用这个路径下的 JRE,你可以把 JRE 文件夹和你的.exe文件一起打包,实现“自带 JRE”。
- Header type (头部类型):
- 选择
gui(图形界面)或console(控制台),如果你的程序有图形窗口,就选gui。
- 选择
-
构建:
- 点击 Launch4j 工具栏上的 "Compile" 按钮。
- 成功后,你会在指定的输出目录下得到
YourProgram.exe文件。
如何运行(打开)这个 .exe 文件
- 直接双击:和运行普通
.exe文件一样,直接双击即可,Launch4j 会自动在后台调用java.exe来运行你的 JAR。 - 分发:在打包给用户时,最好将你的
.exe文件和它依赖的 JRE 文件夹一起放在一个文件夹里,并告知用户直接运行.exe文件即可。
总结与对比
| 特性 | 导出 .jar 文件 |
使用 Launch4j 导出 .exe |
|---|---|---|
| 本质 | Java 标准分发格式 | Windows 下的包装器 |
| 跨平台性 | 极佳,一个 .jar 文件可在 Windows, macOS, Linux 上运行。 |
差,仅限 Windows 系统。 |
| 文件体积 | 较小,只包含编译后的代码和资源。 | 较大,因为需要包含一个 .exe 启动器,如果自带 JRE,体积会非常大。 |
| 依赖管理 | 依赖用户系统安装的 JRE,可以引导用户安装。 | 可以自带 JRE,实现“开箱即用”,但会增加分发体积。 |
| 用户友好度 | 对普通用户可能不友好,需要双击或命令行运行。 | 非常高,用户习惯于双击 .exe 文件,体验和原生软件一样。 |
| 推荐场景 | 绝大多数情况,特别是开源项目、跨平台应用、服务器应用。 | 需要分发给对技术不熟悉的 Windows 用户,或希望提供“原生”体验时。 |
对于学习和大多数项目,强烈推荐你掌握方案一(导出 .jar 文件),这是 Java 的精髓所在。
只有在明确知道你的用户只使用 Windows,并且你希望给他们提供最简单的使用体验时,才考虑使用方案二(Launch4j)来生成一个 .exe 包装器。
