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

Gradle构建的Spring Boot项目部署Heroku时报NoSuchMethodException如何解决

问题根因

首先抛出的java.lang.NoSuchMethodException错误核心是Kotlin编写的Spring Boot启动类的main方法不符合JVM入口要求,no main manifest attribute报错是打包时未正确生成可执行JAR的清单配置。

可行解决方案
  • 修正启动类main方法写法
    Kotlin的Spring Boot启动类有两种符合JVM要求的写法,二选一即可:
    1. 顶层main函数写法(无静态注解要求,推荐)
    @SpringBootApplication
    class ApiApplication
    
    fun main(args: Array<String>) {
        runApplication<ApiApplication>(*args)
    }
    
    1. 伴生对象写法(必须加@JvmStatic注解)
    @SpringBootApplication
    class ApiApplication {
        companion object {
            @JvmStatic
            fun main(args: Array<String>) {
                runApplication<ApiApplication>(*args)
            }
        }
    }
    
  • 补充Gradle打包配置
    在现有的build.gradle中添加如下配置,确保生成的可执行JAR携带正确的清单信息,避免清单属性报错:
// 启用bootJar打包,配置正确的主类属性
tasks.named('bootJar') {
    enabled = true
    manifest {
        attributes 'Main-Class': 'org.springframework.boot.loader.JarLauncher'
        attributes 'Start-Class': 'com.abade.apigateway.ApiApplication'
    }
}
// 禁用普通jar任务,避免和bootJar生成的文件冲突
tasks.named('jar') {
    enabled = false
}
  • 优化Procfile配置(可选)
    可以将原有硬编码JAR包名的配置替换为通用写法,后续版本号变更无需修改Procfile:
web: java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/*.jar
验证步骤

修改完成后先在本地执行./gradlew bootJar打包,再执行java -jar build/libs/api-gateway-0.0.1-SNAPSHOT.jar验证本地启动正常,再推送到Heroku部署即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:00:05