Heroku,Java,Procfile,无法找到或加载主程序 class
Heroku, Java, Procfile, Could not find or load main class
我将 heroku 与 maven 一起用于 运行 服务器。我的目标是让 heroku 运行 the java class server.class 作为一个 web dyno。
如何编写一个 procfile 来以 Web 方式执行 java 程序 server.class?
我当前的 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
可能有用的信息
procfile
web: java -cp $JAVA_OPTS target/classes/v1/a1/*
Returns
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 中。
- 我的 classes 在 target/classes/v1/a1/ 里面。
- server.java 有一个主要方法和有效的构造函数方法。
- 我所有的依赖项似乎都是有序的。
- Maven 确实将我的 .java 文件构建到目标目录中的 .class 文件中。
- 我在 unix 上,所以引号和分号可能不起作用。
我认为你的 Procfile
应该包含:
web: java -cp target/classes/:target/dependency/* v1.a1.server
假设如下:
- 你的
server
class在文件target/v1/a1/server.class
中
- 您的
server
class 的 Java 代码包括 package v1.a1;
- 您的 class 名称和文件名是小写的。
我在您之前的尝试中注意到的一些问题包括:
- 您将
$JAVA_OPTS
传递给 -cp
选项(不正确)
- 您在完全限定的 class 名称中使用
/
而不是 .
(不正确)
- 您在完全限定的 class 名称中包含了
target
目录(不正确)
target/classes/
和 target/dependency/
目录中的文件属于 class 路径(即传递给 -cp
),而 [=24= 的最后一个参数] 命令应该是完全限定的 class 名称(格式为 package.Class
)。
heroku 的默认 Procfile 是为 Linux 编写的。使用的分隔符是“:”。
要在 Windows 台机器上使用 Procfile,请按以下方式修改 Procfile
web: java -cp target/classes/;target/dependency/* com.yourpackage.MainClassName
我将 heroku 与 maven 一起用于 运行 服务器。我的目标是让 heroku 运行 the java class server.class 作为一个 web dyno。
如何编写一个 procfile 来以 Web 方式执行 java 程序 server.class?
我当前的 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
可能有用的信息
procfile
web: java -cp $JAVA_OPTS target/classes/v1/a1/*
Returns
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 中。
- 我的 classes 在 target/classes/v1/a1/ 里面。
- server.java 有一个主要方法和有效的构造函数方法。
- 我所有的依赖项似乎都是有序的。
- Maven 确实将我的 .java 文件构建到目标目录中的 .class 文件中。
- 我在 unix 上,所以引号和分号可能不起作用。
我认为你的 Procfile
应该包含:
web: java -cp target/classes/:target/dependency/* v1.a1.server
假设如下:
- 你的
server
class在文件target/v1/a1/server.class
中
- 您的
server
class 的 Java 代码包括package v1.a1;
- 您的 class 名称和文件名是小写的。
我在您之前的尝试中注意到的一些问题包括:
- 您将
$JAVA_OPTS
传递给-cp
选项(不正确) - 您在完全限定的 class 名称中使用
/
而不是.
(不正确) - 您在完全限定的 class 名称中包含了
target
目录(不正确)
target/classes/
和 target/dependency/
目录中的文件属于 class 路径(即传递给 -cp
),而 [=24= 的最后一个参数] 命令应该是完全限定的 class 名称(格式为 package.Class
)。
heroku 的默认 Procfile 是为 Linux 编写的。使用的分隔符是“:”。
要在 Windows 台机器上使用 Procfile,请按以下方式修改 Procfile
web: java -cp target/classes/;target/dependency/* com.yourpackage.MainClassName