将SpringBoot项目打包成EXE文件的完整教程(多种方式)

 更新时间:2025年10月30日 11:55:37   作者:Rysxt  
在Spring Boot项目中打包是一个非常重要的环节,因为它决定了应用程序如何部署到生产环境中,这篇文章主要介绍了将SpringBoot项目打包成EXE文件的完整教程,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

本教程将详细介绍如何将SpringBoot 3项目打包成Windows平台下的EXE可执行文件。虽然SpringBoot本身是为Java应用设计的,通常以JAR文件形式运行,但通过一些工具我们可以将其转换为更友好的EXE格式,方便Windows用户使用。

准备工作

1. 环境要求

  • JDK 17或更高版本(SpringBoot 3要求)
  • Maven或Gradle构建工具
  • Windows操作系统
  • 已有的SpringBoot 3项目

2. 项目准备

确保你的SpringBoot 3项目能够正常运行,可以通过以下命令测试:

mvn clean spring-boot:run
# 或
gradle bootRun

方法一:使用jpackage工具(推荐)

jpackage是JDK 14引入的工具,在JDK 17中已经成熟,是官方推荐的打包方式。

1. 打包为可执行的JAR文件

首先,使用Maven或Gradle将项目打包为可执行的JAR文件:

​Maven项目:​

mvn clean package

​Gradle项目:​

gradle build

打包完成后,你会在target/(Maven)或build/libs/(Gradle)目录下找到可执行的JAR文件,通常命名为your-project-name-0.0.1-SNAPSHOT.jar或类似的名称。

2. 下载并安装WiX Toolset(可选,用于创建MSI安装包)

jpackage可以生成EXE和MSI安装包,要生成MSI需要WiX Toolset:

3. 使用jpackage打包为EXE

打开命令提示符或PowerShell,执行以下命令:

jpackage --name YourAppName \
         --input target/ \
         --main-jar your-project-name-0.0.1-SNAPSHOT.jar \
         --main-class com.yourpackage.YourApplication \
         --type exe \
         --java-options "-Xmx512m" \
         --win-shortcut \
         --win-menu \
         --output dist/

​参数说明:​

  • --name: 应用程序名称
  • --input: 包含JAR文件的目录
  • --main-jar: 主JAR文件名
  • --main-class: 你的SpringBoot主类全限定名
  • --type: 输出类型,这里使用exe
  • --java-options: JVM参数
  • --win-shortcut: 创建桌面快捷方式
  • --win-menu: 添加到开始菜单
  • --output: 输出目录

​如果不知道主类名:​
可以查看你的pom.xml中的<mainClass>配置,或者主启动类通常带有@SpringBootApplication注解。

4. 完整示例(以SpringBoot 3项目为例)

假设你的项目结构如下:

my-springboot-app/
├── pom.xml
└── src/
    └── main/
        ├── java/
        │   └── com/
        │       └── example/
        │           └── demo/
        │               └── DemoApplication.java  # 主类
        └── resources/
            └── application.properties

​打包步骤:​

  1. 使用Maven打包:
mvn clean package
  1. 使用jpackage打包为EXE:
jpackage --name MySpringBootApp \
         --input target/ \
         --main-jar my-springboot-app-0.0.1-SNAPSHOT.jar \
         --main-class com.example.demo.DemoApplication \
         --type app-image \
         --output dist/app-image
  1. 如果要直接生成EXE安装包:
jpackage --name MySpringBootApp \
         --input target/ \
         --main-jar my-springboot-app-0.0.1-SNAPSHOT.jar \
         --main-class com.example.demo.DemoApplication \
         --type exe \
         --win-shortcut \
         --win-menu \
         --output dist/

方法二:使用Launch4j + Inno Setup(更灵活的方案)

如果你需要更多自定义选项,可以使用Launch4j将JAR包装为EXE,再使用Inno Setup创建安装程序。

1. 打包为可执行JAR

同上,使用Maven或Gradle打包为可执行JAR。

2. 下载和安装Launch4j

3. 使用Launch4j配置

  1. 在"Basic"标签页:

    • Output file: 选择输出EXE路径,如dist/MySpringBootApp.exe
    • Jar: 选择你的可执行JAR文件
    • Don't wrap the jar, launch only: 不勾选(如果要包含JAR在EXE内则勾选)
  2. 在"JRE"标签页:

    • Min JRE version: 17 (根据你的JDK版本设置)
    • 可以设置最大版本等
  3. 点击"Build Wrapper"生成EXE

4. (可选)使用Inno Setup创建安装程序

方法三:使用第三方工具(如Badass Runtime Plugin)

对于Maven项目,可以使用Badass Runtime Plugin来简化打包过程。

1. 在pom.xml中添加插件

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>3.0.0</version>
        </plugin>
        
        <!-- Badass Runtime Plugin -->
        <plugin>
            <groupId>org.beryx</groupId>
            <artifactId>badass-runtime-plugin</artifactId>
            <version>2.25.0</version>
            <configuration>
                <mainClass>com.example.demo.DemoApplication</mainClass>
                <bundleJre>true</bundleJre> <!-- 可选,打包JRE -->
                <jrePath>${env.JAVA_HOME}</jrePath> <!-- 如果不打包JRE -->
                <runtimePath>runtime</runtimePath>
                <launcherName>MySpringBootApp</launcherName>
                <windowsExecutable>true</windowsExecutable>
            </configuration>
        </plugin>
    </plugins>
</build>

2. 使用插件打包

mvn clean package badass-runtime:runtime

注意事项

  1. ​JRE依赖​​:生成的EXE仍然需要JRE运行。你可以:

    • 要求用户预先安装JRE
    • 使用jpackage的--runtime-image参数指定JRE
    • 使用工具打包JRE(会增加EXE大小)
  2. ​文件大小​​:包含JRE的EXE文件会比较大(可能50MB+)

  3. ​性能​​:打包为EXE不会提升性能,只是包装形式

  4. ​SpringBoot特性​​:所有SpringBoot特性(自动配置、嵌入式服务器等)都保持不变

  5. ​端口冲突​​:确保你的应用配置了合适的端口,特别是打包后可能在不同环境运行

测试生成的EXE文件

  1. 进入输出目录(如dist/
  2. 双击EXE文件或在命令行运行
  3. 应该能正常启动你的SpringBoot应用

高级配置

1. 打包时包含资源文件

确保你的src/main/resources/下的文件都被正确打包,SpringBoot会自动处理。

2. 配置文件外部化

建议将配置文件(如application.properties)放在外部,便于修改:

java -jar your-app.jar --spring.config.location=file:/path/to/application.properties

3. 日志配置

确保日志配置(如logback.xml)正确,打包后日志功能应正常工作。

总结

将SpringBoot 3项目打包为EXE文件主要依赖于jpackage工具,这是目前最官方和可靠的方法。通过以上步骤,你可以为Windows用户提供更友好的应用程序体验。记住,虽然包装形式变为EXE,但你的应用仍然是完整的SpringBoot应用,所有特性都保持不变。

如果在打包过程中遇到问题,可以检查:

  • JDK版本是否正确
  • 主类名是否正确
  • 依赖是否完整
  • 打包命令参数是否正确

到此这篇关于将SpringBoot项目打包成EXE文件的文章就介绍到这了,更多相关SpringBoot项目打包成EXE文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot自动重启的两种方法

    SpringBoot自动重启的两种方法

    我们在项目开发阶段,可能经常会修改代码,修改完后就要重启Spring Boot,本文主要介绍了SpringBoot自动重启的两种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • MyBatis拦截器如何自动设置创建时间和修改时间

    MyBatis拦截器如何自动设置创建时间和修改时间

    文章介绍了如何通过实现MyBatis的Interceptor接口,在实体类中自动设置创建时间和修改时间,从而提高开发效率
    2025-02-02
  • 基于resty security的Api权限控制与事务支持

    基于resty security的Api权限控制与事务支持

    这篇文章主要为大家介绍了基于resty security的Api权限控制与事务支持让数据操作处于事务控制下,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-03-03
  • Dom4j解析xml复杂多节点报文方式

    Dom4j解析xml复杂多节点报文方式

    这篇文章主要介绍了Dom4j解析xml复杂多节点报文方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java实现按权重随机数

    Java实现按权重随机数

    这篇文章主要介绍了Java实现按权重随机数,本文给出了提出问题、分析问题、解决问题三个步骤,需要的朋友可以参考下
    2015-04-04
  • SpringBoot使用@PathVariable进行数据校验的流程步骤

    SpringBoot使用@PathVariable进行数据校验的流程步骤

    在SpringBoot项目中,我们经常需要从 URL 中获取参数并进行相关的数据校验,而@PathVariable注解就是一种非常方便的方式,可以让我们在方法参数中直接获取URL中的参数,并进行数据校验,本文将介绍如何使用@PathVariable注解进行数据校验
    2023-06-06
  • Java中的LinkedHashSet和TreeSet解读

    Java中的LinkedHashSet和TreeSet解读

    这篇文章主要介绍了Java中的LinkedHashSet和TreeSet解读,哈希表和链表实现的set接口哈希表决定了它元素是唯一的,而链表则保证了他是有序的(存储和取出顺序一致),元素按照一定规则排序,不是按储存时间排的,需要的朋友可以参考下
    2023-09-09
  • Java防止频繁请求、重复提交的操作代码(后端防抖操作)

    Java防止频繁请求、重复提交的操作代码(后端防抖操作)

    在客户端网络慢或者服务器响应慢时,用户有时是会频繁刷新页面或重复提交表单的,这样是会给服务器造成不小的负担的,同时在添加数据时有可能造成不必要的麻烦,今天通过本文给大家介绍下Java防止频繁请求、重复提交的操作代码,一起看看吧
    2022-04-04
  • springboot配置tomcat端口的方法

    springboot配置tomcat端口的方法

    在Spring Boot项目中,Tomcat服务器的端口通常是通过配置文件(application.properties或application.yml)来设置的,下面给大家分享springboot配置tomcat端口的方法,感兴趣的朋友一起看看吧
    2025-05-05
  • Java如何利用POI读取Excel行数

    Java如何利用POI读取Excel行数

    这篇文章主要介绍了java如何利用POI读取Excel行数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02

最新评论