Spring Boot部署Heroku时Procfile的jar路径应如何正确配置
你当前Procfile的配置错误来自于使用了本地Windows的绝对路径,Heroku的运行环境为Linux,无法识别你本地的文件路径,导致web进程启动失败,最终抛出H14错误。
问题1:Procfile的路径与jar包配置
- 绝对不能使用本地C盘开头的路径,该路径仅存在于你的个人电脑上,Heroku服务器不存在对应目录
- Heroku的路径格式为Linux标准,使用正斜杠
/,无需写绝对路径,直接使用相对于项目根目录的相对路径即可 - Heroku执行Maven构建后,Spring Boot的可执行jar包默认存放在项目根目录的
target文件夹下,你可以通过两种方式配置:- 简单写法:直接用通配符匹配,Procfile写为
web: java -jar target/*.jar - 稳定写法:在pom.xml的
<build>节点下添加<finalName>app</finalName>,固定构建产物名为app.jar,Procfile写为web: java -jar target/app.jar,避免多个jar包匹配混乱
- 简单写法:直接用通配符匹配,Procfile写为
注意要确保你的pom.xml中已经配置了spring-boot-maven-plugin的repackage目标,否则生成的jar不是可执行文件,会导致启动失败
问题2:是否需要本地自行构建jar包
不需要本地提前构建jar包,你只需要推送源代码到Heroku即可。
Heroku的构建功能会自动识别Java项目,根据你的pom.xml配置完成依赖拉取、代码编译、打包构建的全流程,运行环境和构建环境统一,可以避免本地与服务器环境差异带来的各类问题。你甚至可以将本地的target目录加入.gitignore,完全不影响部署流程。
问题3:Heroku构建产物的存储路径
Heroku会将你的应用部署在服务器的/app根目录下,构建生成的jar包路径为 /app/target/。如果需要查看具体的构建产物,可以在本地安装Heroku CLI后执行heroku run bash命令,连接到你的应用dyno,进入对应目录即可查看文件。
额外验证步骤
修改完Procfile重新推送后,如果还出现H14错误,可以执行以下命令确认web dyno已经开启:heroku ps:scale web=1
内容的提问来源于stack exchange,提问作者SpringIntoJava
相关产品推荐
相关产品推荐

