Heroku上Spring Boot Worker进程找不到主类问题求助
解决Heroku Worker Dyno找不到Spring Boot主类的问题
核心原因
Spring Boot默认打包的可执行Jar类加载路径与普通Jar不同,直接指定主类运行会出现类找不到的情况;另外可能存在类未被正确编译/打包、Procfile命令配置错误等问题。
具体解决方案
确认类的编译与路径正确性
- 检查
BrandNewClass.java的包声明package com.whatever.externalsystem.business;和文件物理路径是否一致(需对应src/main/java/com/whatever/externalsystem/business/BrandNewClass.java) - 本地执行
mvn clean compile后,查看target/classes目录下是否生成com/whatever/externalsystem/business/BrandNewClass.class文件,若不存在,说明Maven编译未包含该类,需检查pom.xml的编译范围配置
- 检查
调整Spring Boot打包插件配置
在pom.xml的spring-boot-maven-plugin中明确主类(或允许运行时指定),确保打包时包含该类的入口信息:<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 若需支持多个主类,可注释此行,运行时通过命令指定 --> <mainClass>com.whatever.externalsystem.business.BrandNewClass</mainClass> </configuration> </plugin> </plugins> </build>修正Procfile的Worker命令
根据打包方式选择正确的启动命令:- 使用Spring Boot可执行Jar启动(推荐):
替换worker: java -jar target/[你的项目Jar包名].jar com.whatever.externalsystem.business.BrandNewClass[你的项目Jar包名]为target目录下实际生成的Jar文件名 - 直接通过Classpath启动:
此方式依赖Heroku Maven插件将依赖包下载到worker: java -cp target/classes:target/dependency/* com.whatever.externalsystem.business.BrandNewClasstarget/dependency目录
- 使用Spring Boot可执行Jar启动(推荐):
本地预验证
在本地执行对应的Worker启动命令,确认能正常运行后再部署到Heroku,减少重复调试:java -jar target/[你的项目Jar包名].jar com.whatever.externalsystem.business.BrandNewClass排查Heroku部署日志
部署后通过命令查看详细日志,定位编译或打包异常:heroku logs --tail --app [你的Heroku应用名]
内容的提问来源于stack exchange,提问作者Aitor Alonso
相关产品推荐
相关产品推荐

