【发布时间】:2021-08-01 06:02:56
【问题描述】:
我的应用程序在本地运行得非常好,并使用 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,他建议我在编写 Procfile 时参考我的“gradlew”文件,但我没有机会询问我是从该文件复制命令还是将 Procfile 定向到文件中的命令。我选择“gradlew”文件复制到我当前 Procfile 的主类中作为猜测。这是 gradlew 文件底部收集的参数。 gradlew
我尝试通过引用 (com.deepdraft.deep_draft.DeepDraftApplication) 和路径 (java/com/deepdraft/deep_draft/DeepDraftApplication.java) 将主类放入 Procfile。两个 Procfile 都导致日志显示“错误:无法找到或加载主类”。这是完整日志的照片。 logs
但老实说,我不确定为什么 Procfile 需要我编写一个将文件从一个目录复制到另一个目录的脚本。我只是在尝试这个,因为 Heroku 文档使用这个 Procfile 作为 SpringBoot 项目的示例。
很抱歉,如果这些信息到处都是,但我是一名新开发人员,对部署我的第一个应用程序感到非常兴奋。如何构建 Procfile?
(编辑)好吧,其实我找到了一个 jar 文件!我在终端中使用“.jar”而不是“jar”,并找到了一个 gradlewrapper.jar 文件。我将尝试使用该文件来遵循上面的第一个 Procfile 示例,使用 -jar 命令。 gradlewrapper.jar
(编辑 2)哇,我觉得我很接近。收到新的错误消息令人兴奋。哈哈。它说“没有主要清单属性”在 .jar 文件中。 new logs 我发现this 堆栈溢出关于添加清单属性的对话,但我无法编辑这个压缩文件,我拥有的最类似于开发人员文件的文件(包含所有依赖项)是保存在我的build.gradle 文件。 build.gradle file 我现在将尝试编辑 .jar 文件,但任何 cmets 将不胜感激!
【问题讨论】:
-
为什么没有jar文件?你有自定义命令在 heroku 上构建项目吗?
标签: java spring-boot gradle heroku procfile