развертывание java веб-приложения на heroku: NoClassDefFoundError вызвано ClassNotFoundException - PullRequest
3 голосов
/ 28 марта 2020

Я следовал этой инструкции:

https://devcenter.heroku.com/articles/deploying-java

для развертывания веб-приложения java на heroku.

Содержимое моего Procfile выглядит следующим образом:

web: java $JAVA_OPTS -cp target/classes:target/dependency/* com.michael.optimizer.Optimizer

(Оптимизатор - это имя моего основного класса.)

Выполнение команды

mvn clean install 

успешно создает проект.

Но затем выполнение команды

heroku local web

приводит к следующему сообщению об ошибке:

Exception in thread "main" 
5:33:48 PM web.1 |  java.lang.NoClassDefFoundError: javax/json/Json
5:33:48 PM web.1 |  at com.michael.optimizer.api.JsonRequest.doJsonRequest(JsonRequest.java:29)
5:33:48 PM web.1 |      at         com.michael.optimizer.api.StationApi.doJsonRequest(StationApi.java:150)
5:33:48 PM web.1 |      at     com.michael.optimizer.api.StationApi.areaSearch(StationApi.java:73)
5:33:48 PM web.1 |      at com.michael.optimizer.Optimizer.main(Optimizer.java:23)
5:33:48 PM web.1 |  Caused by: java.lang.ClassNotFoundException: javax.json.Json
5:33:48 PM web.1 |      at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
5:33:48 PM web.1 |      at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
5:33:48 PM web.1 |      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
5:33:48 PM web.1 |      at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
5:33:48 PM web.1 |      ... 4 more

Что я не понимаю, так это: когда я запускаю приложение локально, все отлично работает (И неудивительно, что он работает нормально, потому что внутри папки ~ / .m2 / repository / javax / javaee-web-api / 7.0 / javaee-web-api-7.0.jar находится пакет json, где он должен быть. )

Только когда я пытаюсь развернуть на героку, класс javax. json. Json явно не найден.

Что не так ???

1 Ответ

4 голосов
/ 23 апреля 2020

Возможно, вы захотите использовать copy-зависимости ,

mvn install dependency:copy-dependencies 

Эта копия копирует все зависимости в target / dependencies .

Если вы хотите исключить зависимости области теста,

mvn install dependency:copy-dependencies -DexcludeScope=test
...