#java #websphere #noclassdeffounderror
#java #websphere #ошибка noclassdeffounderror
Вопрос:
В Websphere 6.0 у меня развернуто веб-приложение «Project1». Я получаю следующую ошибку:- java.lang.Ошибка NoClassDefFoundError: com.app.X на java.lang.Class.initialize(Class.java:318) в com.app.Y.invoke(Y.java:61)
где оба com.app.X и com.app.Y являются частью отдельных файлов jar, присутствующих в каталоге WEB-INF lib. К вашему сведению, политика загрузки классов — ParentFirst / application.
Я несколько раз пробовал развертывание и перезапуск. Есть какие-нибудь подсказки, что еще я могу попробовать?
спасибо Manglu и Bkail за ваши комментарии. Но проблема заключалась в том, что jar, содержащий класс Y, был скомпилирован на java1.4 версии вместе с jar, содержащим класс X. Однако из-за неправильной проверки нашей системы CVS кто-то скомпилировал jar, содержащий X class, с другой версией java. Итак, во время выполнения, когда загрузчик классов Y class попытался найти конкретную версию класса X, он не смог ее найти. Насколько я понимаю, существует 4 причины, по которым мы можем получить ошибку NoClassDefFound в среде J2EE / JAVA:- i) Класс фактически отсутствует в classpath ii) Класс присутствует, но не виден в иерархии classloader iii) Класс присутствует, но у него другая версия. iv) Как объяснялось выше, класс присутствует, но возникли проблемы в процессе инициализации класса.
Что еще вы хотите добавить?
Ответ №1:
Я подозреваю, что в <clinit>
методе com.app.X произошел сбой, из-за чего JVM помечает его как неисправный, и все последующие попытки ссылаться на класс приведут к NoClassDefFoundError . JVM версии 1.5 включают (initialization failure)
тег в сообщение об исключении, но в WAS 6.0 используются JVM версии 1.4.2. Просмотрите журналы, чтобы com.app.X.<clinit>
найти реальную причину сбоя.
Ответ №2:
Попробуйте предоставить трассировку стека для людей, которые здесь помогут вам.
Как упоминал bkail, похоже, что com.app.X завершается сбоем во время его инициализации, в результате чего вы получаете ошибку NCDF.
Многократное развертывание не поможет, если вы не поймете, почему X завершается с ошибкой во время его инициализации. Проверьте, есть ли в нем какие-либо статические блоки инициализации.
Могут существовать как X, так и Y, и для того, чтобы X загружался загрузчиком классов, если X зависит от ABC, которого нет, это может привести к NCDF для X.
HTH Manglu