使用Apache Commons Daemon procrun部署Spring Boot服务遇JarLauncher类查找失败求助
解决procrun找不到JarLauncher的错误及替代方案
问题原因分析
出现FindClass org/springframework/boot/loader/JarLauncher failed错误,核心原因集中在三点:
- 打包的Jar不是完整的可执行Fat Jar,缺少JarLauncher类
- procrun服务配置的类路径、主类或JVM路径错误
- 服务运行账户无Jar包或JDK目录的访问权限
针对procrun的修复步骤
1. 确认Fat Jar的完整性
执行以下命令检查Jar包内是否包含目标类:
jar tf your-app.jar | findstr "org/springframework/boot/loader/JarLauncher.class"
如果无输出,说明打包不完整,重新执行mvn clean package确保spring-boot-maven-plugin正确执行(该插件默认绑定package阶段,会生成包含所有依赖的Fat Jar)。
2. 修正procrun服务配置
重新安装服务时,确保参数准确:
prunsrv.exe //IS//RESTApi ^ --DisplayName="RESTApi Service" ^ --Description="Spring Boot REST API Service" ^ --Install="C:\tools\procrun\prunsrv.exe" ^ --StartMode=jvm ^ --StartClass=org.springframework.boot.loader.JarLauncher ^ --StartPath="C:\apps\restapi" ^ --Classpath="C:\apps\restapi\your-app.jar" ^ --Jvm="C:\Program Files\Java\jdk1.8.0_391\jre\bin\server\jvm.dll" ^ --JvmOptions="-Xmx512m;-Xms256m" ^ --StopMode=jvm ^ --StopClass=org.springframework.boot.loader.JarLauncher ^ --StopParams="stop"
重点注意:
--Classpath必须精准指向你的Fat Jar路径--Jvm要使用与procrun匹配的位数(64位procrun对应64位JDK的jvm.dll)- Spring Boot 3.x版本主类仍是
org.springframework.boot.loader.JarLauncher,无需修改
3. 检查权限配置
确保服务运行账户(默认Local System)拥有Jar包所在目录、JDK目录的读取权限,避免因权限不足无法加载类。
替代工具推荐(无需NSSM)
1. WinSW(Windows Service Wrapper)
轻量开源工具,配置直观:
- 下载对应位数的WinSW程序(如
WinSW-x64.exe),重命名为restapi-service.exe - 创建同名XML配置文件
restapi-service.xml:
<service> <id>RESTApi</id> <name>RESTApi Service</name> <description>Spring Boot REST API Service</description> <executable>java</executable> <arguments>-jar "C:\apps\restapi\your-app.jar" --spring.profiles.active=prod</arguments> <logpath>C:\apps\restapi\logs</logpath> <logmode>rotate</logmode> <onfailure>restart</onfailure> <restartdelay>5000</restartdelay> </service>
- 执行命令安装启动服务:
restapi-service.exe install restapi-service.exe start
2. Spring Boot原生可执行Jar服务
利用你已配置的<executable>true</executable>,直接将Jar安装为服务:
# 安装服务 your-app.jar install # 启动服务 net start RESTApi # 停止服务 net stop RESTApi # 卸载服务 your-app.jar uninstall
该方式无需额外工具,Spring Boot内置了服务封装逻辑,适合快速部署。
内容的提问来源于stack exchange,提问作者paula
相关产品推荐
相关产品推荐

