Tomcat показывает NoClassDefFoundError для класса в моем проекте - PullRequest
1 голос
/ 16 ноября 2011

У меня есть проект Vaadin, в котором используется SOAP API JIRA. Он отлично работает в Eclipse, но попытки заставить его работать в IntelliJ и с Maven постепенно сводят меня с ума, хотя я чувствую, что близок к завершению.

Всякий раз, когда я развертываю свое приложение на локальном сервере Tomcat, все, что я получаю, это трассировка стека, вызванная этим:

java.lang.NoClassDefFoundError   
be.azvub.jira.service.JiraSoapServiceServiceLocator.getJirasoapserviceV2(JiraSoapServiceServiceLocator.java:53)

Этот класс существует, потому что ничего не изменилось с тех пор, как я переместил их из eclipse, и потому что я могу открыть файл .java и увидеть, что там нет ошибок. Я могу удалить фрагмент кода, который вызывает этот класс, и все хорошо, так что это локализованная проблема. Класс проблемы находится в пакете, отличном от моего класса Application (который все еще работает), где делается вызов.

В чем причина этой проблемы и как я могу ее исправить?

Ответы [ 3 ]

1 голос
/ 16 ноября 2011

Я не знаю, как я это сделал, но исправив несвязанную проблему, это было исправлено вместе с ней.

Я изменил каталог веб-ресурсов в File |Структура проекта |Аспекты (поэтому приложение может найти папку тем Vaadin в каталоге WebContent вместо src / main / webapp, по умолчанию для которого он установлен). Ни одна из папок на самом деле не содержит класс, который доставлял мне проблемы.вынудил Maven заново импортировать все, как я делал несколько раз раньше, но теперь я использовал эту возможность в контекстном меню проекта в Project Explorer вместо вкладки Maven Projects, так что, может быть, это что-то изменило?Мэйвен все еще в значительной степени вуду, но, по крайней мере, сейчас все работает нормально.

Но все равно спасибо за вашу помощь.

1 голос
/ 14 марта 2018

У меня была такая же проблема, и я исправил ее после отладки ...

IntelliJ обычно автоматически создает папку / lib в папке / src внутри вашего проекта, а затем сообщает вашему проекту, что всеLIBs там, на этой основе;мы обычно предполагаем, что это место для размещения всех ваших LIB там.

Хотя с этой настройкой ваш проект будет хорошо скомпилирован, поскольку IntelliJ может связываться с вашими JAR-файлами. Однако при такой настройке Tomcat не будет выполняться, поскольку Tomcat ожидает найти классы в / WEB-INF / lib., ...

Таким образом, решение заключается в следующем:

1) Перетащите вашу папку LIB (извините, я имею в виду "/ lib") из / src / lib, чтобы оказаться в /каталог web / WEB-INF

2) Вы получите предупреждение о перемещении классов / JAR, скажем, ДА.

(Вы должны указать своему проекту переназначить существующий предопределенныйLIBs в новую папку):

3) В главном меню выберите ФАЙЛ -> Структура проекта

4) Выберите Библиотеки в левом меню

5) Если выне видите никаких существующих библиотек, тогда все готово, нажмите OK

6) Если вы видите там библиотеки, то:

7) Нажмите на каждую LIB из среднейсписок, а затем удалите те, которые не могут быть найдены,

8) Снова добавьте их снова из нового местоположения

9) Повторите (7) для всех других LIB.

10) ОК,

Повторно скомпилируйте, ваш проект должен развернуться на Tomcat и работать нормально.

С уважением, Heider

0 голосов
/ 16 ноября 2011

Я предполагаю, что это путь сборки, проверьте, присутствует ли вызываемый вами класс в пути сборки проекта.

...