java.lang.NoClassDefFoundError: не удалось инициализировать класс org.apache.poi.openxml4j.opc.internal.marshallers.ZipPackagePropertiesMarshaller

Я пытаюсь создать Excel с помощью Xssf API, потому что его объем памяти невелик. Он отлично работает на моей локальной машине с jdk1.7. Но когда я пытаюсь запустить его в UNIX, где версия Java 1.6.0_75, это дает мне следующую ошибку.

java.lang.NoClassDefFoundError: Could not initialize class org.apache.poi.openxml4j.opc.internal.marshallers.ZipPackagePropertiesMarshaller

У меня есть следующие банки в моем пути к классам

  • пои-3.11-20141221.jar
  • poi-excelant-3.11-20141221.jar
  • poi-ooxml-3.11-20141221.jar
  • poi-ooxml-schemas-3.11-20141221.jar
  • xmlbeans-2.6.0.jar
  • xercesImpl.jar

Я проверил, что poi-3.11-20141221.jar имеет класс ZipPackagePropertiesMarshaller.

Кажется, какой-то баночки не хватает. Я что-то упускаю?


person Rizwan Shaikh    schedule 27.01.2015    source источник


Ответы (2)


Я нашел решение своей проблемы. Я заменил poi-3.11-20141221.jar на poi-ooxml-3.9.jar. Это сработало.

person Rizwan Shaikh    schedule 27.01.2015

Java версии 1.6.0_75 не существует, я полагаю, вы делаете опечатку. Последним обновлением Java 6 является обновление 45 (6u45).

Класс ZipPackagePropertiesMarshaller обязательно загружается во время выполнения. Исключение NoClassDefFoundError возникает на этапе инициализации; если бы исключение было ClassNotFoundException, оно было бы другим...

Класс ZipPackagePropertiesMarshaller не изменился между версиями 3.11 и 3.9, но класс PackagePropertiesMarshaller, расширенный ZipPackagePropertiesMarshaller, изменен: основное изменение касается использования StAX в более новой версии.

Дистрибутив StAX поставляется с Java 6, но версия Java 6 update 18 (http://www.oracle.com/technetwork/java/javase/6u18-142093.html) представляет версию API StAX 1.2.

Рассмотрите возможность использования Java 6u18 или новее. Это должно решить вашу проблему.

В официальном FAQ есть некоторые указания на аналогичную проблему: https://poi.apache.org/faq.html#faq-N1017E.

Более того, найденный вами обходной путь не самый лучший, см. последний FAQ по POI.

person RitZ    schedule 21.05.2015