Java项目打包成EXE全攻略
Java项目打包成EXE全攻略引言在Java开发中我们经常需要将项目打包成可执行的EXE文件方便用户在没有安装Java运行环境JRE的Windows系统上直接运行。本文将从实战角度出发详细介绍几种主流方法包括使用Launch4j、jpackageJDK 14以及结合JRE打包的完整方案并提供大量可运行的代码示例。## 为什么需要打包成EXE-用户友好无需用户手动安装Java或配置环境变量-企业部署在内部系统中统一分发可执行文件-跨平台兼容虽然Java本身跨平台但EXE形式更适合Windows生态-安全保护可以混淆代码或加密增加反向工程难度## 方法一使用Launch4j经典方案Launch4j是一个轻量级工具可以将JAR文件包装成EXE支持自定义图标、JRE搜索路径等。### 实战步骤1.准备Java项目先创建一个简单的Java应用java// HelloApp.javaimport javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;public class HelloApp extends JFrame { public HelloApp() { setTitle(Java EXE 示例); setSize(400, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); JButton btn new JButton(点击显示信息); btn.addActionListener((ActionEvent e) - { JOptionPane.showMessageDialog(this, Hello! 这是一个从JAR打包的EXE文件。\nJava版本: System.getProperty(java.version)); }); add(btn, BorderLayout.CENTER); setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(() - new HelloApp()); }}2.编译并打包成JARbash# 编译Java源文件javac HelloApp.java# 创建MANIFEST.MF文件echo Main-Class: HelloApp MANIFEST.MF# 打包成JARjar cvfm HelloApp.jar MANIFEST.MF HelloApp.class3.配置Launch4j下载Launch4j后创建配置文件helloapp.xmlxml?xml version1.0 encodingUTF-8?launch4jConfig dontWrapJarfalse/dontWrapJar headerTypegui/headerType jarHelloApp.jar/jar outfileHelloApp.exe/outfile errTitleJava Runtime Error/errTitle cmdLine/cmdLine chdir./chdir prioritynormal/priority downloadUrlhttps://java.com/download/downloadUrl supportUrl/supportUrl stayAlivefalse/stayAlive restartOnCrashfalse/restartOnCrash manifest/manifest iconapp.ico/icon jre pathjre/path bundledJrePathjre/bundledJrePath bundledJre64Bitfalse/bundledJre64Bit minVersion1.8.0/minVersion maxVersion/maxVersion jdkPreferencepreferJre/jdkPreference runtimeBits64/32/runtimeBits /jre/launch4jConfig4.生成EXE文件bash# 使用命令行生成EXElaunch4jc helloapp.xml或者通过Launch4j的GUI界面加载配置文件点击「Build wrapper」生成EXE。## 方法二使用JDK 14的jpackage工具jpackage是Oracle官方提供的打包工具支持生成EXE、DMG、DEB等多种格式。### 实战步骤1.准备模块化Java项目java// src/com/example/Main.javapackage com.example;import javax.swing.*;import java.awt.*;import java.io.File;public class Main { public static void main(String[] args) { SwingUtilities.invokeLater(() - { JFrame frame new JFrame(jpackage 打包示例); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 400); frame.setLocationRelativeTo(null); JTextArea textArea new JTextArea(); textArea.setFont(new Font(Monospaced, Font.PLAIN, 12)); textArea.setText(欢迎使用jpackage打包的Java应用\n\n 当前工作目录: new File(.).getAbsolutePath() \n Java版本: System.getProperty(java.version)); textArea.setEditable(false); JScrollPane scrollPane new JScrollPane(textArea); frame.add(scrollPane, BorderLayout.CENTER); frame.setVisible(true); }); }}2.创建module-info.javajava// src/module-info.javamodule MyApp { requires java.desktop; exports com.example;}3.编译并打包bash# 编译模块javac -d mods --module-source-path src src/com/example/Main.java src/module-info.java# 创建JAR文件jar --create --file MyApp.jar -C mods .# 使用jpackage生成EXE需要WiX工具集jpackage --input . --main-jar MyApp.jar --main-class com.example.Main \ --type exe --name MyApp --app-version 1.0 \ --vendor My Company --icon app.ico \ --runtime-image jre --jlink-options --strip-debug --no-header-files --no-man-pages## 方法三完整打包JRE的终极方案为了让用户无需安装JRE我们可以将JRE一起打包进EXE。### 使用JLink创建自定义JREbash# 使用jlink创建最小化的JRE仅包含必要模块jlink --module-path %JAVA_HOME%\jmods --add-modules java.base,java.desktop,java.logging \ --output custom-jre --strip-debug --compress2 --no-header-files --no-man-pages### 结合Launch4j与JRE打包修改配置文件指定JRE路径为相对路径xmljre pathcustom-jre/path bundledJrePathcustom-jre/bundledJrePath bundledJre64Bittrue/bundledJre64Bit minVersion11/minVersion runtimeBits64/runtimeBits/jre然后使用NSIS或Inno Setup制作安装程序将EXE和custom-jre目录一起打包。## 方法四使用Exe4j商业工具Exe4j是另一种流行的商业工具功能更强大。xml!-- exe4j配置文件示例部分 --application nameMyApp version1.0 executable nameMyApp.exe iconapp.ico typeGUI mainClasscom.example.Main/mainClass classPath jar fileMyApp.jar/ /classPath jreLocation searchPathjre/searchPath minVersion1.8/minVersion /jreLocation /executable/application## 常见问题与解决方案### 问题1EXE运行时提示“找不到或无法加载主类”-解决方案检查MANIFEST.MF中的Main-Class是否正确确保JAR文件包含所有依赖-调试技巧使用jar tf YourApp.jar查看JAR内容### 问题2中文字体乱码在JVM启动参数中添加bash-Dfile.encodingUTF-8 -Dsun.jnu.encodingUTF-8### 问题3打包文件体积过大- 使用jlink裁剪模块只保留必要的Java模块- 使用ProGuard等工具混淆并压缩代码- 考虑使用GraalVM Native Image生成原生二进制文件## 总结本文从实战角度详细介绍了四种将Java项目打包成EXE的方法1.Launch4j轻量级、免费适合中小型项目快速打包2.jpackageOracle官方方案支持模块化适合JDK 14项目3.完整JRE打包提供最完整的用户体验但文件体积较大4.Exe4j商业工具功能全面适合企业级应用选择哪种方案取决于你的具体需求- 如果用户已安装JRELaunch4j是最快的方式- 如果需要完全独立运行建议使用jpackageJRE打包- 对于企业级分发Exe4j提供更多高级功能无论选择哪种方法都要注意测试不同Windows版本Win7/10/11的兼容性并考虑32位和64位系统的差异。希望本文能帮助你顺利将Java项目打包成专业的EXE文件

相关新闻

AI降重工具深度测评:技术原理与实战对比

AI降重工具深度测评:技术原理与实战对比

1. 项目概述:AI降重工具的深度测评需求最近在内容创作圈子里,AI生成内容(AIGC)的检测和降重需求突然暴增。作为每天要处理大量文字工作的内容从业者,我深刻感受到这个痛点的迫切性——无论是学术论文查重、自媒体内容原…

2026/7/28 16:31:50阅读更多 →
基础Demo_5switch语句 判断(学习笔记)

基础Demo_5switch语句 判断(学习笔记)

switch语句 和上篇if同为判断语句 关键字为:case defauit break seitch格式一public class Demo01_SWITCH{public static void main(String[] args){// 定义变量,表示月份 int month 8; // 使用switch ,根据月份,输出季节 switch(month){case 1:System.out.printl…

2026/7/28 16:31:50阅读更多 →
【Springboot毕设全套源码+文档】基于SpringBoot的智慧物业管理系统的设计与实现(丰富项目+远程调试+讲解+定制)

【Springboot毕设全套源码+文档】基于SpringBoot的智慧物业管理系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/28 16:29:50阅读更多 →
电商项目专题(三)-项目搭建

电商项目专题(三)-项目搭建

1.搭建父工程 创建统一的父工程:yigou,用来管理依赖及其版本,注意是创建project,而不是moudle填写坐标信息:填写保存位置信息:父工程不需要代码,只是管理依赖,因此我们不选择任何Spr…

2026/7/28 17:40:00阅读更多 →
霞鹜文楷:如何用这款免费开源字体彻底改变你的中文排版体验?

霞鹜文楷:如何用这款免费开源字体彻底改变你的中文排版体验?

霞鹜文楷:如何用这款免费开源字体彻底改变你的中文排版体验? 【免费下载链接】LxgwWenKai An unprofessional open-source Chinese font derived from Fontworks Klee One. 一款非专业的开源中文字体,基于 FONTWORKS 出品字体 Klee One 衍生。…

2026/7/28 17:40:00阅读更多 →
keepalived主备VIP配置

keepalived主备VIP配置

服务器名称IP地址VIP网卡名称备注local-100-101172.20.100.101172.20.100.250eth0主docker-100-108172.20.100.108172.20.100.250eth0备前提: 1、关闭防火墙和selinux 2、确保安装keepalived的服务的各节点的用于集群服务的接口支持MULTICAST(多播或组播…

2026/7/28 17:40:00阅读更多 →
Nintendo Switch大气层系统:开启游戏主机无限潜能的终极解决方案

Nintendo Switch大气层系统:开启游戏主机无限潜能的终极解决方案

Nintendo Switch大气层系统:开启游戏主机无限潜能的终极解决方案 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 想要让你的Nintendo Switch游戏体验更上一层楼吗?A…

2026/7/28 17:40:00阅读更多 →
centos7安装fastdfs单机版

centos7安装fastdfs单机版

安装fastdfs,需要安装先安装libcommon,再安装fastdfs。上传到fastdfs上的文件,如果需要通过nginx访问,需要下载fastdfs-nginx-module,安装nginx时,需要指定fastdfs-nginx-module为nginx的一个模块。 下载安…

2026/7/28 17:40:00阅读更多 →
【Springboot毕设全套源码+文档】基于SpringBoot的养老中心管理系统的设计与实现(丰富项目+远程调试+讲解+定制)

【Springboot毕设全套源码+文档】基于SpringBoot的养老中心管理系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/28 17:38:00阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:29阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:29阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:29阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/27 16:57:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →