Maven Spring Boot项目如何创建启停可执行Jar的脚本及打包exe方案
问题1:已运行的可执行Jar包停止方案
以下是三种适配不同场景的可行停止方案:
- 基于Jar进程名停止(通用无依赖方案)
适配没有开启Web端口的Spring Batch场景,通过JDK自带的jps命令定位对应Jar的PID后终止进程,bat脚本实现如下:
若用户环境仅安装JRE无jps工具,可替换为按Java进程+启动参数匹配的逻辑。@echo off for /f "tokens=1" %%i in ('jps -l ^| findstr "myapp.jar"') do ( taskkill /f /pid %%i echo 应用已停止 ) - 基于端口号停止(开启Web服务场景)
如果应用引入了Web依赖启动了服务端口,可通过端口定位PID终止进程,示例(端口改为你实际使用的端口):@echo off for /f "tokens=5" %%a in ('netstat -ano ^| findstr "8080"') do ( taskkill /f /pid %%a echo 应用已停止 ) - 优雅停机(需资源清理场景)
引入Spring Boot Actuator依赖,开启shutdown端点,可实现停机前自动执行资源释放、任务收尾等逻辑,配置方式:- pom.xml引入actuator依赖
- application.properties添加配置:
停止时直接调用端点即可:management.endpoints.web.exposure.include=shutdown management.endpoint.shutdown.enabled=truecurl -X POST http://localhost:8080/actuator/shutdown
问题2:启停方案选型与exe打包实现
bat脚本属于低成本快速落地方案,如果是小范围内部用户使用,逻辑简单易维护,完全够用。如果面向无技术基础的外部用户,或者需要后台静默运行、开机自启、崩溃自动恢复、免JRE环境运行等能力,打包为exe是更优的选择,具体实现有两种常用方案:
方案1:Maven插件集成打包(launch4j)
直接在现有pom.xml中添加插件配置,和原有构建流程完全打通,无需额外工具:
<plugin> <groupId>com.akathist.maven.plugins.launch4j</groupId> <artifactId>launch4j-maven-plugin</artifactId> <version>2.3.0</version> <executions> <execution> <id>build-exe</id> <phase>package</phase> <goals> <goal>launch4j</goal> </goals> <configuration> <!-- 不需要黑框后台运行就改为gui --> <headerType>console</headerType> <outfile>target/我的批量处理工具.exe</outfile> <!-- 改为你实际生成的jar包路径 --> <jar>target/myapp.jar</jar> <jre> <!-- 按需配置支持的JRE版本范围 --> <minVersion>1.8.0</minVersion> <maxVersion>17.0.0</maxVersion> </jre> </configuration> </execution> </executions> </plugin>
执行mvn package后即可在target目录生成exe文件,停止脚本可直接简化为taskkill /f /im 我的批量处理工具.exe,不会误杀其他Java进程。
方案2:单文件绿色打包(适配无JRE环境)
如果需要用户电脑不用安装Java就能运行,可以用打包工具把Jar和JRE一起打包为单个exe文件,操作步骤:
- 准备好对应版本的JRE文件夹、你的应用Jar包
- 执行打包命令(打包工具可直接搜索对应名称下载)
- 生成的exe双击即可运行,不需要用户提前配置Java环境
内容的提问来源于stack exchange,提问作者langar
相关产品推荐
相关产品推荐

