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

Spring Boot应用部署至Heroku启动时崩溃,报H10错误的解决方案咨询

解决Spring Boot应用Heroku部署后H10崩溃的问题

嘿,从你提供的日志和配置来看,问题的核心其实很明确——咱们一步步来搞定它:

核心问题:JAR包缺少主清单属性

你的日志里有个关键报错:

no main manifest attribute, in target/clinica-0.0.1-SNAPSHOT.jar

这说明你打包出来的JAR不是可执行的Spring Boot JAR。原因是你移除了spring-boot-maven-plugin,这个插件是Spring Boot打包的核心:它会帮你生成包含主类信息的MANIFEST.MF文件,还会把所有依赖打包进JAR,让它能独立运行。

第一步:恢复Spring Boot Maven插件

把pom.xml里的<build>部分改回原来的配置(这才是正确的Spring Boot打包方式):

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

另外注意:你当前maven-compiler-plugin指定的source和target是1.8,但<java.version>是11,版本不一致会导致潜在问题。建议直接移除这个maven-compiler-plugin配置——Spring Boot的父POM已经帮你默认配置了匹配Java版本的编译参数。

第二步:修正Heroku适配配置

1. 动态端口配置

Heroku会给每个应用动态分配端口,通过环境变量PORT传递。你现在硬编码了server.port=8080,这会导致应用无法监听Heroku分配的端口,修改application.properties:

server.port=${PORT:8080}

这样本地开发时用8080,部署到Heroku时自动用平台分配的端口。

2. 数据库配置适配

你当前的数据库配置指向本地PostgreSQL,部署到Heroku后要使用平台提供的数据库实例。修改application.properties的数据库部分:

spring.datasource.url=${DATABASE_URL}
spring.datasource.username=${DB_USERNAME:postgres}
spring.datasource.password=${DB_PASSWORD:password}

Heroku会自动设置DATABASE_URL等环境变量,这样应用在Heroku上能正确连接数据库,本地开发时依然用你原来的账号密码。

3. 可选但推荐:添加Procfile

虽然Heroku能自动检测Spring Boot应用,但创建Procfile可以明确启动命令,避免自动检测的异常。在项目根目录创建一个无后缀的Procfile文件,内容:

web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/clinica-0.0.1-SNAPSHOT.jar

第三步:重新部署并验证

完成所有修改后,提交代码到GitHub触发Heroku重新部署,或者用Heroku CLI执行:

git add .
git commit -m "Fix packaging and Heroku configurations"
git push heroku main

部署完成后,实时查看日志确认启动状态:

heroku logs --tail

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:42:37