Ошибка NoClassDefFoundError - PullRequest
       7

Ошибка NoClassDefFoundError

2 голосов
/ 28 июня 2011

У меня есть 3 проекта Java:

ProjectA
ProjectAEAR
ProjectB

ProjectA имеет класс, который создает экземпляр класса ProjectB. ProjectA также имеет главный класс, который создает экземпляр и тестирует этот класс на ProjectA.

Если я запускаю основной класс, все работает отлично, и ожидаемые результаты обрабатываются.

Теперь в ProjectA я создал веб-сервис, который создает экземпляр предыдущего класса ProjectB, и когда я публикую проект ProjectAEAR и вызываю веб-сервисЯ получаю следующую ошибку:

org.apache.axis2.jaxws.WebServiceExceptionLogger log. Был обнаружен сбрасываемый объект java.lang.NoClassDefFoundError.

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

Настройка ProjectA:

Java Build Path -> Projects: ProjectB
Java Build Path -> Libraries: All JARS needed by project B

Настройка ProjectAEAR:

Java EE Module Dependencies -> ProjectA, ProjectB, JARS needed by projectB (In Lib Dir checkbox selected)

Настройка ProjectB:

Java Build Path -> Projects: nothing
Java Build Path -> Libraries: All JARS needed by project B

Пожалуйста, сообщите мне.

Спасибо

Ответы [ 2 ]

1 голос
/ 28 июня 2011

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

Я не могу дать вам прямой ответ, но я предлагаю следующее: экспортируйте EARпроект как EAR-файл из Eclipse (я предполагаю, что это Eclipse, основываясь на информации о вашей настройке).Затем изучите полученный файл и проверьте, что на самом деле собрано.Вероятно, какой-то файл не экспортируется.Возможно, вам нужно установить некоторые флажки в свойствах проекта -> Путь сборки Java -> Порядок и экспорт.

Система для правильной настройки проектов Eclipse для сборки и экспорта не нужна, например, посмотрите, какправильно настроить WAR-проекты здесь (что отличается от вашего EAR-проекта, но, может быть, вам на самом деле не нужен EAR?): Eclipse WTP развертывание зависимостей пути сборки

1 голос
/ 28 июня 2011

Пожалуйста, проверьте ваш classpath для вашего сервера приложений j2ee. Я подозреваю, что у вас есть альтернативный или конфликтующий JAR с сервера приложений, который имеет приоритет над classpath, указанным в вашем EAR. Основные шаги - откройте ваши ProjectA и ProjectB и просмотрите каждый из JAR. Затем сравните это с тем, что предоставляет ваш сервер приложений.

Предполагая, что у вас есть контроль над кодом, вы можете добавить блок try / finally в соответствующие исключения строки и использовать этот фрагмент в своем модуле, чтобы показать, откуда загружаются файлы: http://snippets.dzone.com/posts/show/3719

Может оказаться, что запуск модульных тестов с помощью параметров отладчика загрузчика классов поможет определить, где именно загружена зависимость. (используйте -verbose: опция класса).

...