首次部署Ktor应用至Heroku遇Unable to access jarfile错误求助
解决Heroku部署Ktor应用时“Unable to access jarfile”错误
问题分析
构建成功且Heroku后台显示jar已部署,但启动时提示无法访问jar文件,核心原因在于stage任务未正确关联ShadowJar构建、jar文件名不匹配或ShadowJar的主类配置缺失。
解决方案步骤
1. 修正Stage任务依赖
在build.gradle.kts中,将stage任务的依赖从installDist改为shadowJar,确保Heroku构建时生成包含所有依赖的fat jar:
tasks { create("stage").dependsOn("shadowJar") }
2. 配置ShadowJar任务
取消注释并完善ShadowJar的配置,确保主类正确且生成的jar文件名与Procfile完全匹配:
tasks.shadowJar { manifest { attributes["Main-Class"] = application.mainClass.get() } // 指定jar文件名,匹配Procfile中的school-backend-all.jar archiveBaseName.set("school-backend") archiveClassifier.set("all") archiveVersion.set("") // 移除版本号,避免文件名带版本后缀 }
3. 验证Procfile路径
保持Procfile内容不变,确认路径指向正确:
web: java -jar ./build/libs/school-backend-all.jar
4. 重新部署
提交修改后重新推送到Heroku:
git add build.gradle.kts Procfile git commit -m "Fix jar access issue for Heroku deployment" git push heroku main
额外排查步骤
如果问题仍存在,可通过Heroku命令行查看dyno内的文件结构,确认jar实际路径和名称:
heroku run bash # 进入后执行以下命令查看jar文件 ls -la build/libs/
根据实际输出调整Procfile中的jar文件名即可。
内容的提问来源于stack exchange,提问作者Deepak Gahlot
相关产品推荐
相关产品推荐

