Ошибка загрузки класса HSSFWorkbook во время выполнения

Я сталкиваюсь с распространенной проблемой java.lang.NoClassDefFoundError во время выполнения приложения, когда пытаюсь создать и написать книгу, используя окончательную версию poi 3.2 (для . только файлы xls). Я создал эту утилиту как проект корпоративного приложения с модулями ejb и web. Создание книги запускается через таймер EJB, который запускается при загрузке проекта на сервер.

Сбой времени выполнения для класса org.apache.poi.hssf.usermodel.HSSFWorkbook. Насколько мне известно, ссылки на библиотеки сделаны. Я поместил финальную банку poi 3.2 в папку ejb/META-INF/lib/folder. Я также добавил его на вкладке «Заказ и экспорт» пути сборки и указал в зависимостях Java EE. На всякий случай я также поместил его в папку web-inf/lib веб-проекта, но безрезультатно.

В том же приложении я также использую банку Jsoup. После ссылки на него в указанных выше местах Jsoup работает нормально.

Как ни странно, эта ошибка не возникает, когда я создаю тот же сервис, что и веб-приложение (динамический веб-проект) с обычным служебным таймером. Рабочая книга создается. Баночка помещается в папку web-inf/lib.

Может кто-нибудь, пожалуйста, дайте мне знать, есть ли разница в том, как эта банка упоминается для веб-проекта и корпоративного проекта?

Благодарю за терпение и помощь..


person noviceProgrammer    schedule 17.11.2015    source источник
comment
Apache POI 3.2 уже более 7 лет! С какой стати вы используете такую ​​древнюю версию? Список исправлений огромен!   -  person Gagravarr    schedule 17.11.2015
comment
@Gagravarr Вы абсолютно правы. Первоначально я использовал версию 3.13 poi jar (со всеми файлами ooxml), из-за которой у меня возникла другая проблема с загрузкой во время выполнения.   -  person noviceProgrammer    schedule 18.11.2015
comment
@Gagravarr Несмотря на то, что я использую только импорт, связанный с рабочей книгой HSSF, при использовании последних банок poi (любых версий от 3,5 до 3,13), при загрузке во время выполнения он ищет класс org.apache.poi.ss.usermodel .RichtextString. Я также проверил банки, кажется, в них есть этот класс. Просто чтобы сделать это по крайней мере актуальным, я попытался использовать более старую версию, которая загружает только пакеты HSSF вместо пакетов SS. Любые идеи?   -  person noviceProgrammer    schedule 18.11.2015
comment
Согласно часто задаваемым вопросам по Apache POI, смешивание банок POI из разных версий не поддерживается . Перестань! Используйте только 3,13 банки   -  person Gagravarr    schedule 18.11.2015
comment
@Gagravarr Я не смешиваю версии jar. Я хотел сказать, что пытался использовать версии jar от 3.2 до 3.13 отдельно. Ниже показано, что я использовал, что привело к ошибке загрузки класса org.apache.poi.ss.usermodel.RichTextString. poi-3.13-20150929.jar, poi-example-3.13-20150929.jar, poi-excelant-3.13-20150929.jar, poi-ooxml-3.13-20150929.jar, poi-ooxml-schemas-3.13-20150929.jar, poi-блокнот-3.13-20150929.jar   -  person noviceProgrammer    schedule 18.11.2015
comment
org.apache.poi.ss.usermodel.RichTextString содержится в основной банке POI, вы можете переименовать .jar в .zip + распаковать + посмотреть сами!   -  person Gagravarr    schedule 18.11.2015
comment
Да, это я тоже проверил. Это доступно. Как я уже упоминал в своем вопросе, это работает без проблем как динамический веб-проект. Я просто не знаю, загружает ли его как корпоративное приложение банки по-разному...   -  person noviceProgrammer    schedule 18.11.2015
comment
@Gagravarr Привет, кажется, я устранил эту ошибку. Я поместил jar-файлы в проект ejb, что было нормально во время компиляции, но во время выполнения я искал jar-файлы из проекта EAR. Поэтому я поместил банки в папку META-INF/lib проекта EAR и сослался на нее. Это сработало. Спасибо за вашу помощь.   -  person noviceProgrammer    schedule 25.11.2015


Ответы (1)


Это сработало, когда я поместил банки в папку META-INF/lib проекта EAR, а не проекта EJB, и сослался на них в зависимостях библиотеки.

person noviceProgrammer    schedule 25.11.2015