首页 > 解决方案 > 为 Java Spring Boot Gradle 项目构建 Heroku Procfile

问题描述

我的应用程序在本地运行得非常好,并与 Heroku 一起部署,但我正在努力构建一个 Procfile 来声明应该执行什么命令来启动应用程序。我是一名新开发人员,可以在 Linux 进程模型的工作方式上使用一些帮助。

Heroku 文档为 Java Spring Boot 项目提供了两个 Procfile 示例:

web: java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/demo-0.0.1-SNAPSHOT.jar

web: java $JAVA_OPTS -cp target/classes:target/dependency/* com.example.HelloWorld

我决定尝试遵循 -cp 示例,因为我没有任何 .jar 文件。

这是我当前的 Procfile:

web: java $JAVA_OPTS -cp gradlew java/com/deepdraft/deep_draft/DeepDraftApplication.java 过程文件

在最近的一次开发人员采访中,我简要询问了 Procfile,他建议我在编写 Procfile 时参考我的“gradlew”文件,但我没有机会询问我是从该文件复制命令还是指导 Procfile到文件中的命令。我选择“gradlew”文件复制到我当前 Procfile 的主类中作为猜测。这是 gradlew 文件底部收集的参数。 毕业典礼

我尝试通过引用 (com.deepdraft.deep_draft.DeepDraftApplication) 和路径 (java/com/deepdraft/deep_draft/DeepDraftApplication.java) 将主类放在 Procfile 中。两个 Procfile 都导致日志显示“错误:无法找到或加载主类”。这是完整日志的照片。 日志

但老实说,我不确定为什么 Procfile 需要我编写一个将文件从一个目录复制到另一个目录的脚本。我只是在尝试这个,因为 Heroku 文档使用这个 Procfile 作为 SpringBoot 项目的示例。

抱歉,如果这些信息到处都是,但我是一名新开发人员,非常高兴能够部署我的第一个应用程序。如何构建 Procfile?

(编辑)好的,实际上我找到了一个 jar 文件!我在终端中使用“.jar”而不是“jar”,并找到了一个 gradlewrapper.jar 文件。我将尝试使用这个文件来遵循上面的第一个 Procfile 示例,使用 -jar 命令。gradlewrapper.jar

(编辑 2)哇,我觉得我很亲近。收到新的错误消息令人兴奋。哈哈。它说“没有主要清单属性”在 .jar 文件中。 新日志 我发现这个关于添加清单属性的堆栈溢出对话,但我无法编辑这个压缩文件,我拥有的最类似于开发人员文件的文件(包含所有依赖项)是保存在我的build.gradle 文件。 build.gradle 文件 我现在将尝试编辑 .jar 文件,但我们将不胜感激!

标签: javaspring-bootgradleherokuprocfile

解决方案


heroku 所引用的 jar 文件是您项目的可执行 jar 文件。现在有两种情况:

  1. 对于 maven springboot 项目,我们在项目目录中使用“mvn package”。之后,您应该能够在目标文件夹中找到 jar 文件。
  2. 对于 gradle springboot 项目,您应该可以这样做。

推荐阅读