Heroku,Java,Procfile,找不到或加载主类

Posted

技术标签:

【中文标题】Heroku,Java,Procfile,找不到或加载主类【英文标题】:Heroku, Java, Procfile, Could not find or load main class 【发布时间】:2016-08-12 11:26:33 【问题描述】:

我正在使用带有 maven 的 heroku 来运行服务器。我的目标是让 heroku 将 java 类 server.class 作为 web dyno 运行。

如何编写 procfile 以将 java 程序 server.class 作为 web 执行?

我当前的 Procfile

web: java -cp $JAVA_OPTS target/classes/v1/a1/server

我的错误。(来自 heroku 日志)

Picked up JAVA_TOOL_OPTIONS: -Xmx350m -Xss512k -Dfile.encoding=UTF-8
Error: Could not find or load main class target.classes.v1.a1.server
State changed from starting to crashed

可能有用的信息

过程文件

web: java -cp $JAVA_OPTS target/classes/v1/a1/*

返回

Error: Could not find or load main class target.classes.v1.a1.myOtherClass

我原来的 Procfile(也没有工作)

web: java -cp target/classes/:target/dependency/* server
我的文件结构与 heroku 文档中给出的示例有点不同,所以我稍微修改了 procfile。 我的依赖项不在 /target/dependencies 中。 我的课程在 target/classes/v1/a1/ 内。 server.java 有一个 main 方法和一个有效的构造方法。 我的所有依赖项似乎都井然有序。 Maven 确实将我的 .java 文件构建到目标目录中的 .class 文件中。 我使用的是 unix,所以引号和分号可能不起作用。

【问题讨论】:

【参考方案1】:

heroku 的默认 Procfile 是为 Linux 编写的。其中使用的分隔符是“:”。

要在 Windows 机器上使用 Procfile 修改 Procfile 如下

web: java -cp target/classes/;target/dependency/* com.yourpackage.MainClassName

【讨论】:

【参考方案2】:

我认为您的Procfile 应该包含:

web: java -cp target/classes/:target/dependency/* v1.a1.server

这假设如下:

您的server 类在文件target/v1/a1/server.classserver 类的 Java 代码包括 package v1.a1; 你的类名和文件名都是小写的。

我在您之前的尝试中注意到的一些问题包括:

您将$JAVA_OPTS 传递给-cp 选项(不正确) 您在完全限定的类名中使用/ 而不是.(不正确) 您在完全限定的类名中包含 target 目录(不正确)

target/classes/target/dependency/ 目录中的文件属于类路径(即传递给-cp),而java 命令的最后一个参数应该是完全限定的类名(格式为@987654336 @)。

【讨论】:

感谢您的帮助。

以上是关于Heroku,Java,Procfile,找不到或加载主类的主要内容,如果未能解决你的问题,请参考以下文章

Gunicorn / Procfile - 找不到module.wsgi

Heroku procfile“Procfile 中没有定义这样的进程类型 web”错误

找不到该进程类型,Heroku

在heroku上找不到gunicorn

在当前目录中找不到 Procfile 和 package.json 文件 - 请参阅 run-foreman.js

heroku node.js bash:节点:找不到命令