Heroku,Java,Procfile,无法找到或加载主类

dya*_*ude 6 java heroku maven procfile

我正在将heroku与maven一起使用来运行服务器。我的目标是让heroku作为Web dyno运行Java类server.class。

我将如何编写procfile来以网络方式执行Java程序server.class?


我当前的Procfile

web: java -cp $JAVA_OPTS target/classes/v1/a1/server
Run Code Online (Sandbox Code Playgroud)

我的错误。(来自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
Run Code Online (Sandbox Code Playgroud)


可能有用的信息

proc文件

web: java -cp $JAVA_OPTS target/classes/v1/a1/*
Run Code Online (Sandbox Code Playgroud)

退货

Error: Could not find or load main class target.classes.v1.a1.myOtherClass
Run Code Online (Sandbox Code Playgroud)

我原来的Procfile(也没用)

web: java -cp target/classes/:target/dependency/* server
Run Code Online (Sandbox Code Playgroud)
  • 我的文件结构与heroku文档中给出的示例有所不同,因此我对procfile进行了一些修改。
  • 我的依赖项不在/ target / dependencies中。
  • 我的课程在target / classes / v1 / a1 /中。
  • server.java具有main方法和有效的构造方法。
  • 我所有的依赖关系似乎都井井有条。
  • Maven确实将我的.java文件构建到目标目录中的.class文件中。
  • 我在Unix上,所以引号和分号可能无法工作。

Nit*_*mar 5

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

要在 Windows 计算机上使用 Procfile,请修改 Procfile,如下所示

web: java -cp target/classes/;target/dependency/* com.yourpackage.MainClassName
Run Code Online (Sandbox Code Playgroud)


cod*_*ger 2

我认为你Procfile应该包含:

web: java -cp target/classes/:target/dependency/* v1.a1.server
Run Code Online (Sandbox Code Playgroud)

这假设如下:

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

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

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

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