使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件

使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件

文章目录

  • 使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件
  • 什么是 exe4j
  • 准备工作
  • 打包 Spring Boot 项目为 EXE 文件
    • 1.启动 exe4j
    • 2. 选择项目类型
    • 3. 配置项目名称和输出目录
    • 4. 配置项目类型或可执行文件名称
    • 5. java配置
    • 6. JRE或JDK配置
    • 7. 配置启动动画
    • 8.配置Message
    • 9.编译
  • 注意事项
  • 验证 EXE 文件

什么是 exe4j

Exe4j 是一款用于将 Java 应用程序打包为 Windows 平台上可执行文件(.exe)的工具。无论是服务器端、GUI 程序还是命令行应用,都可以通过 exe4j 生成独立的 EXE 文件。此外,exe4j 还可以:

  • 替代默认的 java.exe,以自定义进程名出现在任务管理器中。
  • 提供本地启动画面。
  • 检测和绑定适合的 JRE/JDK。
  • 进行启动时错误处理。

注意:Exe4j 支持的 Java 版本范围为 JDK 1.8 到 JDK 11。

准备工作

  1. 环境要求

    • 安装 JDK(版本为 1.8 至 11)。
    • 准备 Spring Boot 项目的可运行 JAR 包。
  2. 下载和安装 Exe4j

    • 下载地址:https://www.ej-technologies.com/products/exe4j/download.html。
    • 也可使用提供的百度网盘链接:
      链接: https://pan.baidu.com/s/1NSn_9h_v0bvaCMq6coBjpw 提取码: v8kt。
  3. 确认项目已打包为 JAR 文件

    • 执行以下命令打包 Spring Boot 项目:

      mvn clean package
      
    • target 目录下找到生成的 JAR 文件(如 myapp.jar)。

打包 Spring Boot 项目为 EXE 文件

以下是通过 exe4j 打包的完整步骤:

1.启动 exe4j

打开 exe4j,进入欢迎界面后,点击 Next

image-20241125171047342

2. 选择项目类型

  • Executable Type 页面,选择 JAR in EXE mode(将 JAR 包转换为 EXE 文件),然后点击 Next

    image-20241125171135240

3. 配置项目名称和输出目录

image-20241125171307231

image-20241125171519432

image-20241125171720646

点击 Next

4. 配置项目类型或可执行文件名称

image-20241126111640867

配置操作系统支持 32-bit or 64-bit

  • 默认情况下会生成 32 位 EXE。
  • 如果需要在 64 位系统上运行,请勾选 Generate 64-bit executable

默认next

image-20241126112018690

5. java配置

  • JVM参数

    -Dfile.encoding=utf-8
    
  • 添加jar包

  • 选择程序入口

    如果是springboot项目,输入下面类

    org.springframework.boot.loader.JarLauncher
    
  • 添加jre或jdk

    入口Advanced 0ptions

    将jre或jdk复制到输出目录,选择jre或jdk,删除自带的

配置好的效果如下

6. JRE或JDK配置

image-20241126105758132

添加JRE或JDK

image-20241126110032289

删除默认的,只保留自己添加的

image-20241126110155678

默认JVM即可

image-20241126110438869

7. 配置启动动画

可忽略

image-20241126110600587

8.配置Message

可忽略

image-20241126110712084

9.编译

image-20241126110818053

编译完成后在输出目录就能看到了

image-20241126110912221

此时直接点击输出目录的exe文件即可运行,或者点击截图里面的Click Here to Start the Application运行

注意事项

  1. JAR 包格式
    • 默认 Spring Boot JAR 包是嵌套结构,主类应该指定为 org.springframework.boot.loader.JarLauncher
    • 如果需要主类直接加载,需要解压并重新打包 JAR,将 BOOT-INF/classes 的内容移到根目录,并将依赖放在类路径中。
  2. JRE 捆绑
    • 如果目标环境可能没有安装 JDK/JRE,建议将最小化的 JRE(如使用 jlink 生成的)与应用程序一同打包。
  3. 兼容性问题
    • Exe4j 仅支持 JDK 1.8 至 11,请确保 JDK 版本在此范围内。
    • 如果您的项目使用了 JDK 17 或更高版本,请改用其他工具(如 Launch4jjpackage)。
  4. 路径配置
    • 使用相对路径可以提高可移植性,尤其是在捆绑 JRE 的情况下。

验证 EXE 文件

  1. 将生成的 EXE 文件和依赖的 JAR 或捆绑的 JRE 一起复制到目标环境。
  2. 双击 EXE 文件,验证是否能正常运行。
  3. 在命令行中运行 EXE 文件,检查是否有错误日志输出。

通过以上步骤,您可以成功使用 Exe4j 将 Spring Boot 项目打包为 Windows 下的 EXE 文件。如果在过程中遇到问题,可以随时询问!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/923941.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

24/11/26 视觉笔记 通过特征提取和透视变换查找对象

在本节中我们将检测和跟踪任意大小的对象,这些对象可能是在不同角度或者在部分遮挡的情况下观察到的。 为此我们将运用特征描述子(Feature Descriptor),这是捕获感兴趣对象的重要属性的一种方式。我们这样是为了即使将对象嵌入繁…

【K8S问题系列 |18 】如何解决 imagePullSecrets配置正确,但docker pull仍然失败问题

如果 imagePullSecrets 配置正确,但在执行 docker pull 命令时仍然失败,可能存在以下几种原因。以下是详细的排查步骤和解决方案。 1. 检查 Docker 登录凭证 确保你使用的是与 imagePullSecrets 中相同的凭证进行 Docker 登录: 1.1 直接登录…

uniapp vue2项目迁移vue3项目

uniapp vue2项目迁移vue3项目,必须适配的部分 一、main.js 创建应用实例 // 之前 - Vue 2 import Vue from vue import App from ./App Vue.config.productionTip false // vue3 不再需要 App.mpType app // vue3 不再需要 const app new Vue({ ...App }) …

php反序列化1_常见php序列化的CTF考题

声明: 以下多内容来自暗月师傅我是通过他的教程来学习记录的,如有侵权联系删除。 一道反序列化的CTF题分享_ctf反序列化题目_Mr.95的博客-CSDN博客 一些其他大佬的wp参考:php_反序列化_1 | dayu’s blog (killdayu.com) 序列化一个对象将…

Web 表单开发全解析:从基础到高级掌握 HTML 表单设计

文章目录 前言一、什么是 Web 表单?二、表单元素详解总结前言 在现代 Web 开发中,表单 是用户与后端服务交互的重要桥梁。无论是用户登录、注册、搜索,还是提交反馈,表单都无处不在。在本文中,我们将从基础入手,全面解析表单的核心知识点,并通过示例带你轻松掌握表单开…

88页精品PPT | 某电信集团大数据平台建设方案技术交流

这份PPT文档是关于某电信集团大数据平台建设的技术交流方案,内容涵盖了现状分析、规划思路、产品设计、成功案例以及干货附录等多个部分。文档详细介绍了集团大数据平台的建设背景、技术特点、面临的挑战和痛点,以及具体的技术架构和实施策略。还包括了数…

利用图像识别给CAD图纸找不同

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

【CSP CCF记录】201712-2第12次认证 游戏

题目 样例输入1 5 2 样例输出1 3 样例输入2 7 3 样例输出2 4 代码 没有技术含量的一道题 #include<bits/stdc.h> using namespace std; int main() {int n,k;int a[1010]{0}; // 标记小朋友是否被淘汰 cin>>n>>k;int i0,num0,mn; while(m!1){i1; if(a[i]!1…

Unity图形学之BRDF双向反射分布函数

1.描述了入射光线在非透明物体表面如何进行反射&#xff0c;也就是说多少光发生了漫反射&#xff0c;多少光发生了镜面反射 BRDF 函数计算的是“特定反射方向的光强与入射光强的比例” 2.各向异性 与 均向性 相反&#xff0c;是指在不同方向具有不同行为的性质&#xff0c;也就…

华为ENSP--BGP路由协议实验详解

项目背景 随着A公司网络规模的增长和新业务对互联网接入速度及稳定性需求的提升&#xff0c;公司决定升级其网络设施。为此&#xff0c;A公司向运营商B租用了两条线路以接入网络&#xff0c;旨在提高网络资源的利用率&#xff0c;并增强网络的安全性、稳定性和可靠性&#xff0…

Springboot项目搭建(5)-前端注册界面

1.创建项目文件 news&#xff1a;为后端IDE文件 news_client&#xff1a;为前端VSCode文件 在 ..\news\news_client 中启用cmd/PowerShell 查看当前 npm 配置的注册表&#xff08;registry&#xff09;地址是否在https://registry.npmmirror.com 如果不在&#xff0c;可在cd…

Centos 7 系统 openGauss 3.1.0 一主两备集群安装部署指南

现供职于某上市互联网公司担任DBA Oracle & PG ACE称号&#xff0c; 拥有 Oracle OCM、AWS、以及部分国产数据库等产品认证。 喜欢技术分享&#xff0c;热爱交友&#xff0c;也热爱健身。 2019年加入墨天轮&#xff0c;目前已发表了一百多篇原创文章&#xff0c;曾多次…

w~视觉~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12538137 #SIF3D 通过两种创新的注意力机制——三元意图感知注意力&#xff08;TIA&#xff09;和场景语义一致性感知注意力&#xff08;SCA&#xff09;——来识别场景中的显著点云&#xff0c;并辅助运动轨迹和姿态的预测…

TypeScript 系统学习 开篇

想学习 TypeScript 的小伙伴看过来&#xff0c;本文将带你一步步学习 TypeScript 入门相关的十四个知识点&#xff0c;详细的内容大纲请看下图&#xff1a; 一、TypeScript 是什么 TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集&#xff0c…

计算机网络socket编程(5)_TCP网络编程实现echo_server

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络socket编程(5)_TCP网络编程实现echo_server 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交…

Stable Diffusion 3详解

&#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&…

网络安全原理与技术思考题/简答题

作业1&#xff08;第1章、第2章、第8章&#xff09; 1. 网络安全的基本属性有哪些&#xff1f;简单解释每个基本属性的含义。网络安全的扩展属性包括哪些&#xff1f; 基本属性&#xff1a; 1.机密性(Confidentiality)&#xff1a; 含义&#xff1a;确保信息不被未授权的用户…

【大数据学习 | Spark-Core】Spark的分区器(HashPartitioner和RangePartitioner)

之前学过的kv类型上面的算子 groupby groupByKey reduceBykey sortBy sortByKey join[cogroup left inner right] shuffle的 mapValues keys values flatMapValues 普通算子&#xff0c;管道形式的算子 shuffle的过程是因为数据产生了打乱重分&#xff0c;分组、排序、join等…

Java代码实现数字信封

1. 前言 本篇博客是工作经验总结&#xff0c;如果您发现此篇博客有疏漏或有待改进之处&#xff0c;欢迎评论区交流。 2. 数字信封 数字信封使用的是接收者的非对称密钥对。即&#xff1a;用接收者的公钥加密&#xff0c;且只能由接收者的私钥解密。其实现过程如下&#xff1a;…

第 4 章 Java 并发包中原子操作类原理剖析

原子变量操作类 AtomicLong 是原子性递增或者递减类&#xff0c;其内部使用 Unsafe 来实现&#xff0c;AtomicLong类也是在 rt.jar 包下面的&#xff0c;AtomicLong 类就是通过 BootStarp 类加载器进行加载的。这里的原子操作类都使用 CAS 非阻塞算法 private static final lon…