Spring Boot+Kotlin+Gradle部署Heroku提示Main方法未找到如何解决?
问题核心原因
- Kotlin中定义在文件顶层的
main函数,编译后会生成在「文件名+Kt后缀」的类中,你当前配置的主类com.markoid.packit.PackitApplication是注解标注的启动类,不是包含main方法的实际类,正确主类名应为com.markoid.packit.PackitApplicationKt - 你配置的是普通Jar任务的Manifest属性,但Spring Boot Gradle插件默认使用
bootJar任务构建可执行部署包,普通Jar任务的配置不会生效
解决步骤
- 第一步:删除
build.gradle.kts中原来的tasks.withType<Jar>相关配置,替换为下面任意一种配置即可:
方案A:直接配置Spring Boot全局主类
方案B:单独配置bootJar任务的ManifestspringBoot { mainClass.set("com.markoid.packit.PackitApplicationKt") }tasks.getByName<org.springframework.boot.gradle.tasks.bundling.BootJar>("bootJar") { mainClass.set("com.markoid.packit.PackitApplicationKt") } - 第二步:在项目根目录新建名为
Procfile的文件(无后缀名),写入以下启动命令,适配Heroku的端口规则和部署路径:web: java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/*.jar - 第三步:本地验证打包是否正常,执行
./gradlew bootJar命令构建包,再执行java -jar build/libs/生成的jar包名称.jar,确认本地可以正常启动后,重新推送到Heroku部署即可。
内容的提问来源于stack exchange,提问作者knockmark10
相关产品推荐
相关产品推荐

