为 Java Spring Boot Gradle 项目构建 Heroku Procfile
Building a Heroku Procfile for Java Spring Boot Gradle project
我的应用程序在本地运行得很好,并使用 Heroku 部署,但我正在努力构建一个 Procfile,该文件声明应执行什么命令来启动应用程序。我是一名新开发人员,需要一些帮助来了解 Linux 流程模型的工作原理。
Heroku 文档为 Java Spring 引导项目提供了两个 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,他建议我在编写 Procfile 时参考我的“gradlew”文件,但我没有机会询问我是否正在从中复制命令文件或将 Procfile 定向到文件中的命令。我选择将“gradlew”文件复制到当前 Procfile 中的主 class 作为猜测。这是 gradlew 文件底部收集的参数。
gradlew
我已尝试通过引用 (com.deepdraft.deep_draft.DeepDraftApplication) 和路径 (java/com/deepdraft/deep_draft/DeepDraftApplication.java) 将主要 class 放入 Procfile。两个 Procfiles 都产生了一个日志,上面写着“错误:无法找到或加载 main class”。这是完整日志的照片。
logs
但老实说,我不确定为什么 Procfile 需要我编写一个脚本来将文件从一个目录复制到另一个目录。我只是在尝试这个,因为 Heroku 文档使用这个 Procfile 作为 SpringBoot 项目的示例。
抱歉,如果这些信息到处都是,但我是一名新开发人员,非常高兴能够部署我的第一个应用程序。如何构建 Procfile?
(编辑)好的,实际上我找到了一个 jar 文件!我在我的终端中使用“.jar”而不是“jar”并且找到了一个 gradlewrapper.jar 文件。我将尝试使用此文件来遵循上面的第一个 Procfile 示例,使用 -jar 命令。 gradlewrapper.jar
(Edit 2) 哇,我觉得我很亲近。收到新的错误消息令人兴奋。哈哈。它说“没有主要清单属性”在 .jar 文件中。
new logs
我发现 stack overflow conversation about adding a manifest attribute,但我无法编辑这个压缩文件,我拥有的最类似于开发人员文件(包含所有依赖项)的文件是保存的数据在我的 build.gradle 文件中。
build.gradle file
我将暂时尝试编辑 .jar 文件,但如有任何意见,我们将不胜感激!
heroku引用的jar文件就是你项目的可执行jar文件。
现在有两种情况:
- 对于maven springboot项目,我们在项目目录中使用“mvn package”。之后你应该能够在目标文件夹中找到jar文件。
- 对于gradle springboot项目你应该也可以这样做。
您也可以在项目的根目录下创建名称为 Procfile 的文件,并将其放入以下行:
web: java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/nameOfMyApp-0.0.1-SNAPSHOT.jar
我的应用程序在本地运行得很好,并使用 Heroku 部署,但我正在努力构建一个 Procfile,该文件声明应执行什么命令来启动应用程序。我是一名新开发人员,需要一些帮助来了解 Linux 流程模型的工作原理。
Heroku 文档为 Java Spring 引导项目提供了两个 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,他建议我在编写 Procfile 时参考我的“gradlew”文件,但我没有机会询问我是否正在从中复制命令文件或将 Procfile 定向到文件中的命令。我选择将“gradlew”文件复制到当前 Procfile 中的主 class 作为猜测。这是 gradlew 文件底部收集的参数。 gradlew
我已尝试通过引用 (com.deepdraft.deep_draft.DeepDraftApplication) 和路径 (java/com/deepdraft/deep_draft/DeepDraftApplication.java) 将主要 class 放入 Procfile。两个 Procfiles 都产生了一个日志,上面写着“错误:无法找到或加载 main class”。这是完整日志的照片。 logs
但老实说,我不确定为什么 Procfile 需要我编写一个脚本来将文件从一个目录复制到另一个目录。我只是在尝试这个,因为 Heroku 文档使用这个 Procfile 作为 SpringBoot 项目的示例。
抱歉,如果这些信息到处都是,但我是一名新开发人员,非常高兴能够部署我的第一个应用程序。如何构建 Procfile?
(编辑)好的,实际上我找到了一个 jar 文件!我在我的终端中使用“.jar”而不是“jar”并且找到了一个 gradlewrapper.jar 文件。我将尝试使用此文件来遵循上面的第一个 Procfile 示例,使用 -jar 命令。 gradlewrapper.jar
(Edit 2) 哇,我觉得我很亲近。收到新的错误消息令人兴奋。哈哈。它说“没有主要清单属性”在 .jar 文件中。
new logs
我发现
heroku引用的jar文件就是你项目的可执行jar文件。 现在有两种情况:
- 对于maven springboot项目,我们在项目目录中使用“mvn package”。之后你应该能够在目标文件夹中找到jar文件。
- 对于gradle springboot项目你应该也可以这样做。
您也可以在项目的根目录下创建名称为 Procfile 的文件,并将其放入以下行:
web: java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/nameOfMyApp-0.0.1-SNAPSHOT.jar