将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文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java数据脱敏实现的方法总结

    Java数据脱敏实现的方法总结

    数据脱敏,指的是对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护,本文主要是对后端数据脱敏实现的简单总结,希望对大家有所帮助
    2023-07-07
  • Spring Boot项目传参校验的最佳实践指南

    Spring Boot项目传参校验的最佳实践指南

    有参数传递的地方都少不了参数校验,在web开发中前端的参数校验是为了用户体验,后端的参数校验是为了安全,下面这篇文章主要给大家介绍了关于Spring Boot项目传参校验的最佳实践,需要的朋友可以参考下
    2022-04-04
  • SpringBoot+Nacos+MySQL微服务问题及解决方案

    SpringBoot+Nacos+MySQL微服务问题及解决方案

    Java微服务启动失败排查流程:检查日志、服务状态、端口监听、网络连通、配置与Nacos同步、数据库连接、系统资源及启动参数,必要时打包诊断信息并共享文档
    2025-09-09
  • java括号匹配问题介绍

    java括号匹配问题介绍

    大家好,本篇文章主要讲的是java括号匹配问题介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Java查找并高亮Word文档中文本的具体教程

    Java查找并高亮Word文档中文本的具体教程

    在日常的文档处理中,我们常有在 Word 文档中查找特定文本并进行高亮标记的需求,无论是为了快速定位关键信息,还是为了自动化文档审计,这项功能都至关重要,本文将介绍如何利用 Java 编程语言,高效实现 Word 文档的文本查找与高亮操作,需要的朋友可以参考下
    2025-08-08
  • 使用java获取md5值的两种方法

    使用java获取md5值的两种方法

    本篇文章是对使用java获取md5值的两种方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 深入探究Java原型模式的魅力

    深入探究Java原型模式的魅力

    Java原型模式是一种创建型设计模式,它通过复制现有对象的实例来创建新的对象实例,在本篇博客中,我们将详细介绍Java原型模式的原理、实现方式、优缺点以及适用场景等方面,需要的朋友可以参考下
    2023-05-05
  • 手把手教你JAVA进制之间的转换

    手把手教你JAVA进制之间的转换

    这篇文章主要介绍了Java实现的进制转换,结合完整实例形式分析了Java实现二进制、十六进制、字符串、数组等相关转换操作技巧,需要的朋友可以参考下
    2021-08-08
  • SpringBoot配置绑定方法详解

    SpringBoot配置绑定方法详解

    配置绑定是SpringBoot其中一个底层功能,SpringBoot把配置绑定的过程变得更加简单,传统java将常用的配置放到配置文件properties中,之后将这些配置绑定到javabean中
    2022-10-10
  • Java Stream流从入门到精通(最新整理)

    Java Stream流从入门到精通(最新整理)

    Java Stream 是一个来自 java.util.stream 包的抽象概念,它允许你以声明方式处理数据集合(例如 List、Set 等),本文给大家介绍Java Stream流从入门到精通,感兴趣的朋友跟随小编一起看看吧
    2025-09-09

最新评论