Не могу понять причину NoClassDefFoundError: aspose/pdf/Paragraph

Я не могу загрузить страницы своего веб-приложения (локально на Tomcat 7.0.2.6) из-за этой ошибки NoClassDefFound. Я в своем уме пытаюсь понять, в чем причина, вот что я знаю:

У моего коллеги этот проект успешно работает локально (на Tomcat) и на нашем сервере разработки (WebLogic).

Я сделал новый выпадающий список из svn, поэтому мой код точно такой же, как у него. Я проверил, что у меня есть ссылка на общую библиотеку Aspose (и что там есть необходимые .jars), и что в weblogic.xml есть запись для нее.

Мы видели эту же ошибку при первоначальном развертывании на WebLogic, потому что библиотека Aspose была названа неправильно, но локально на его сервере Tomcat она работала нормально.

Я пытался очистить и перестроить проект безрезультатно.

Насколько я могу понять, это должна быть либо проблема Tomcat, либо, возможно, настройка Eclipse.

Кто-нибудь сталкивался с похожей ситуацией? Любые идеи о том, что попытаться решить эту проблему?


person Corwin01    schedule 15.02.2013    source источник


Ответы (2)


Первое, что вам нужно сделать, это определить, не сталкиваетесь ли вы с другим классом с тем же именем и пакетом. Самый простой способ сделать это с помощью консоли cygwin/linux, сохранить этот сценарий оболочки в файл, скажем, findjar

find "$1" -name "*.jar" -exec sh -c 'jar -tf {}|grep -H --label {} '$2'' \;

поместите его на свой путь и перейдите в корень экземпляра сервера и запустите скрипт следующим образом

findjar . yourclass

Обратите внимание на период, не забудьте его. это вернется, если в вашем проекте есть несколько классов с одинаковым именем.

как только вы убедитесь, что проект чист и существует только одна копия класса, я бы попытался добавить вашу папку общих библиотек в аргументы JVM экземпляров сервера websphere. сделать это:

  1. Заходим в админку, нажимаем на сервера
  2. Открытые типы серверов, нажмите на серверы приложений websphere
  3. Вы должны увидеть свой сервер в списке, нажмите на него
  4. С правой стороны вы увидите раздел «Серверная инфраструктура», а под ним подраздел «Java и управление процессами».
  5. Откройте этот раздел и нажмите «Определение процесса».
  6. На экране определения процесса есть еще один правый столбец. Нажмите «Виртуальная машина Java».
  7. Да, наконец-то мы на правильном экране, здесь конец, обещаю
  8. На странице виртуальной машины есть большое текстовое поле с надписью «Путь к классам». Вам нужно ввести полный путь к папке общих библиотек.

это странно и не имеет смысла делать это, но мне приходилось делать это в прошлом, чтобы мой код мог видеть файлы свойств в общем ресурсе.

person scphantm    schedule 15.02.2013
comment
На самом деле у меня нет серверов приложений websphere. По-видимому, каким-то образом приложение не видит эти банки, несмотря на то, что они находятся в общей библиотеке ref. Я сжульничал и просто сбросил их в свой WEB-INF\lib. Ну что ж. - person Corwin01; 15.02.2013
comment
затмение смешное такое. Вот почему я всегда выполняю развертывание и компиляцию из командной строки. Единственное, для чего я когда-либо использовал eclipse, — это просто редактирование файлов. - person scphantm; 16.02.2013

Возможно, у вашего коллеги есть библиотеки Java, установленные в самом его экземпляре Tomcat.

Посмотрите в каталоге Tomcat некоторые папки lib (я не могу вспомнить точное местоположение, и я думаю, что оно меняется в зависимости от версии), но что-то вроде ${CATALINE_HOME}/common/lib

Убедитесь, что в его установке tomcat нет файлов JAR, отличных от ваших.

Из этого вопроса: Загружает ли Tomcat один и тот же файл библиотеки в память дважды, если они находятся в двух веб-приложениях? Судя по всему, они хранятся здесь:

Tomcat 6 $CATALINA_HOME/lib
Tomcat 5 $CATALINA_HOME/common/lib
person cowls    schedule 15.02.2013
comment
Я проверил, и у меня такие же .jars, что и у него. - person Corwin01; 15.02.2013