You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku部署Vaadin SpringBoot应用报H10 App crashed错误求助

故障原因

H10错误是应用启动进程直接崩溃导致,从日志可以看到核心报错:

Error: Unable to access jarfile server/webapp-runner.jar
启动命令找不到指定路径的webapp-runner.jar文件,进程以状态码1退出,直接导致应用崩溃。
路径不匹配的根源有两个:

  • 你在pom.xml中配置的maven-dependency-plugin没有指定webapp-runner.jar的输出目录,该插件默认会将复制的依赖存放到target/dependency/路径下,和Procfile中写的server/路径完全不一致。
  • 你使用的是SpringBoot + Vaadin技术栈,本身打包后会生成自带Tomcat容器的可执行FatJar,根本不需要依赖webapp-runner(webapp-runner是用于传统WAR包部署的工具),这套配置属于冗余配置还出现了路径错误。
    另外你当前Procfile中target/*的通配符写法也有问题:Maven构建后target目录下会存在原始jar、测试jar、可执行jar等多个文件,通配符匹配多个文件时会导致Java启动命令参数异常。

解决方法

二选一即可,优先推荐第一种方案,是SpringBoot应用部署Heroku的标准方式。

方案一(推荐):移除webapp-runner依赖,直接启动SpringBoot可执行包

  1. 直接删除pom.xml中maven-dependency-plugin下复制webapp-runner的整段配置,不需要这个依赖。
  2. 确认pom.xml中已经配置了spring-boot-maven-plugin(SpringBoot初始化项目默认会带该插件,无需额外修改),打包时会自动生成可执行FatJar。
  3. 在项目根目录新建system.properties文件,写入以下内容指定Heroku使用JDK17运行,和你本地编译版本保持一致,避免字节码版本不兼容错误:
    java.runtime.version=17
    
  4. 将根目录下Procfile的内容替换为:
    web: java $JAVA_OPTS -Dserver.port=$PORT -jar target/*.jar
    
  5. 本地执行mvn clean package确认构建成功后,重新推送代码到Heroku即可正常启动。

方案二:修正现有webapp-runner配置(仅适用于需要打WAR包部署的场景)

如果你坚持使用webapp-runner部署,按以下步骤修正配置:

  1. 修改pom.xml中maven-dependency-plugin的配置,在<configuration>标签下增加输出目录配置,将webapp-runner复制到你Procfile指定的路径:
    <outputDirectory>${project.basedir}/server</outputDirectory>
    
  2. 在pom.xml的根节点下增加packaging配置,指定打包为WAR格式:
    <packaging>war</packaging>
    
  3. 同样新增system.properties文件指定JDK17版本,和方案一第3步一致。
  4. 修改Procfile内容,明确指定WAR包路径,避免通配符匹配多文件:
    web: java $JAVA_OPTS -jar server/webapp-runner.jar --port $PORT target/*.war
    

本地验证技巧

推送代码到Heroku之前,可以本地安装Heroku CLI后执行heroku local web命令模拟线上启动环境,本地能正常启动再推送,可避免绝大多数路径、配置类启动错误。

内容的提问来源于stack exchange,提问作者Rizky Ghifari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:09:17