将SpringBoot项目打包成EXE文件的完整教程(多种方式)
作者:Rysxt
前言
本教程将详细介绍如何将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:
- 访问 https://wixtoolset.org/ 下载并安装
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打包步骤:
- 使用Maven打包:
mvn clean package
- 使用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- 如果要直接生成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
- 访问 http://launch4j.sourceforge.net/ 下载Launch4j
- 解压并运行launch4j.exe
3. 使用Launch4j配置
在"Basic"标签页:
- Output file: 选择输出EXE路径,如
dist/MySpringBootApp.exe - Jar: 选择你的可执行JAR文件
- Don't wrap the jar, launch only: 不勾选(如果要包含JAR在EXE内则勾选)
- Output file: 选择输出EXE路径,如
在"JRE"标签页:
- Min JRE version: 17 (根据你的JDK版本设置)
- 可以设置最大版本等
点击"Build Wrapper"生成EXE
4. (可选)使用Inno Setup创建安装程序
- 下载Inno Setup: http://www.jrsoftware.org/isinfo.php
- 创建安装脚本,将EXE、JAR、依赖等打包为安装程序
方法三:使用第三方工具(如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
注意事项
JRE依赖:生成的EXE仍然需要JRE运行。你可以:
- 要求用户预先安装JRE
- 使用jpackage的
--runtime-image参数指定JRE - 使用工具打包JRE(会增加EXE大小)
文件大小:包含JRE的EXE文件会比较大(可能50MB+)
性能:打包为EXE不会提升性能,只是包装形式
SpringBoot特性:所有SpringBoot特性(自动配置、嵌入式服务器等)都保持不变
端口冲突:确保你的应用配置了合适的端口,特别是打包后可能在不同环境运行
测试生成的EXE文件
- 进入输出目录(如
dist/) - 双击EXE文件或在命令行运行
- 应该能正常启动你的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文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
