Heroku, Java, Procfile, не удалось найти или загрузить основной класс

Я использую heroku с maven для запуска сервера. Моя цель состоит в том, чтобы heroku запускал класс java server.class в качестве веб-дино.

Как мне написать procfile для выполнения Java-программы server.class как web?


Мой текущий Procfile

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

Моя ошибка. (Из журналов героку)

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
  • My file structure is a bit different than the example given in the heroku docs so I modified the procfile a bit.
  • My dependencies are not inside /target/dependencies.
  • My classes are inside target/classes/v1/a1/.
  • server.java has a main method and valid constructor method.
  • All my dependencies seem to be in order.
  • Maven does builds my .java files into .class files in the target directory.
  • I'm on unix so quotes and semicolons probably won't work.

person dyatesdude    schedule 20.04.2016    source источник


Ответы (2)


Я думаю, что ваш Procfile должен содержать:

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

Это предполагает следующее:

  • Ваш server класс находится в файле target/v1/a1/server.class
  • Код Java для вашего класса server включает package v1.a1;
  • Ваше имя класса и имя файла в нижнем регистре.

Несколько проблем, которые я заметил в ваших предыдущих попытках, включали:

  • Вы передаете $JAVA_OPTS параметрам -cp (неверно)
  • Вы используете / вместо . в полном имени класса (неверно)
  • Вы включаете каталог target в полное имя класса (неверно)

Файлы в каталогах target/classes/ и target/dependency/ принадлежат пути к классам (т. е. переданы в -cp), а последним аргументом команды java должно быть полное имя класса (в форме package.Class).

person codefinger    schedule 20.04.2016
comment
Спасибо за помощь. - person dyatesdude; 20.04.2016

Procfile по умолчанию для heroku написан для Linux. Где используется разделитель ":".

Чтобы использовать Procfile на компьютерах с Windows, измените Procfile, как показано ниже.

web: java -cp target/classes/;target/dependency/* com.yourpackage.MainClassName
person Nitish Kumar    schedule 20.09.2016