使用 Gradle (Kotlin) 应用程序部署 Spring Boot - 找不到 jar

Posted

技术标签:

【中文标题】使用 Gradle (Kotlin) 应用程序部署 Spring Boot - 找不到 jar【英文标题】:Deploy Spring Boot with Gradle (Kotlin) application - the jar is not found 【发布时间】:2018-09-12 04:32:40 【问题描述】:

我有一个用 Spring Boot、Kotlin、Gradle 制作的简单应用程序。我关注the official tutorial 并尝试遵循所有可能的默认值。

$ git push heroku master
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 231 bytes | 231.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> JVM Common app detected
remote: -----> Installing JDK 1.8... done
remote: -----> Discovering process types
remote:        Procfile declares types -> (none)
remote:
remote: -----> Compressing...
remote:        Done: 50.7M
remote: -----> Launching...
remote:        Released v50
remote:        https://---.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.

奇怪的是,我得到的是“检测到 JVM 通用应用”而不是“检测到 Gradle 应用”。

我无法部署应用程序。当我做heroku logs --tail 时,我得到:

2018-04-02T23:02:39.257887+00:00 heroku[web.1]: Starting process with command `java $JAVA_OPTS -Dserver.port=50478 -jar build/libs/scraper-0.0.1-SNAPSHOT.jar`
2018-04-02T23:02:41.645544+00:00 heroku[web.1]: Process exited with status 1
2018-04-02T23:02:41.664910+00:00 heroku[web.1]: State changed from starting to crashed
2018-04-02T23:02:41.577966+00:00 app[web.1]: Error: Unable to access jarfile build/libs/scraper-0.0.1-SNAPSHOT.jar
2018-04-02T23:02:41.572483+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them.
2018-04-02T23:05:10.000000+00:00 app[api]: Build started by user ---
2018-04-02T23:05:21.108667+00:00 app[api]: Release v50 created by user ---
2018-04-02T23:05:10.000000+00:00 app[api]: Build succeeded
2018-04-02T23:05:21.635834+00:00 heroku[web.1]: State changed from crashed to down
使用 Spring Boot 2.0.0.RELEASE 使用 Kotlin 1.2.31 build.gradle 中没有特殊任务 没有Procfile

有没有办法使用默认值(即没有 Procfile,没有特殊的 Gradle 任务)来解决这个问题?如果无法使用默认值,我该怎么办?谢谢

【问题讨论】:

【参考方案1】:

您确实应该得到(至少)以下内容:

remote: -----> Gradle app detected
remote: -----> Spring Boot detected

这是你第一次推动吗?您是否手动设置了构建包?也许尝试清除 buildpacks (heroku buildpacks:clear)。如果您可以在某处发布您的应用,这可能有助于检查问题可能是什么。

【讨论】:

以上是关于使用 Gradle (Kotlin) 应用程序部署 Spring Boot - 找不到 jar的主要内容,如果未能解决你的问题,请参考以下文章

使用Gradle构建工具开发Kotlin Web应用程序

未解决的参考匕首 2 + kotlin + android gradle

使用 Gradle Kotlin DSL 发布 Kotlin MPP 元数据

通过 gradle legacy 插件应用程序应用 Kotlin 多平台插件

20分钟快速入门Gradle

如何使用 Gradle Kotlin DSL 对 Spring Boot 应用程序进行 Dockerize