java - 为 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 文件,但我们将不胜感激!
解决方案
heroku 所引用的 jar 文件是您项目的可执行 jar 文件。现在有两种情况:
- 对于 maven springboot 项目,我们在项目目录中使用“mvn package”。之后,您应该能够在目标文件夹中找到 jar 文件。
- 对于 gradle springboot 项目,您应该可以这样做。
推荐阅读
- python - 如何在签名中修复 Tensorflow 1.14.0rc 中的“跨步切片分配与预期类型不兼容”?
- javafx - 如何将下拉按钮添加到表格视图中的列项目 - JavaFX
- amazon-web-services - 如何使用 Terraform 在多可用区中创建 EFS
- vue.js - 使用 vue.js 时如何修复“1 个可能使用 `--fix` 选项修复的错误”?
- python-3.x - 将一个列表的项目插入另一个列表
- vsix - Visual Studio 2019 VSIX 安装错误
- php - PHP从活动目录中读取用户信息
- ruby-on-rails - 如何测试模块呈现的 json
- python - 如何使用漂亮的汤动态刮取内部链接
- amazon-web-services - 自毁 eks 集群