2015-01-27 8 views
5

메모리 풋 프린트가 작기 때문에 Xssf API를 사용하여 Excel을 생성하려고합니다. jdk1.7을 가지고있는 로컬 컴퓨터에서 정상적으로 작동합니다. 하지만 Java 버전이 1.6.0_75 인 UNIX에서 실행하려고하면 다음 오류가 발생합니다.java.lang.NoClassDefFoundError : 클래스 org.apache.poi.openxml4j.opc.internal.marshallers.ZipPackagePropertiesMarshaller를 초기화 할 수 없습니다.

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

나는

  • POI - 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 클래스가 있음을 확인했습니다.

일부 병이없는 것으로 보입니다. 내가 빠진 것이 있습니까?

답변

4

나는 내 자신의 문제에 대한 해결책을 찾았습니다. poi-3.11-20141221.jar를 poi-ooxml-3.9.jar로 바꿨습니다. 그게 효과가 있었어.

+0

이것은 나를위한 생명의 은인, 감사합니다! – smuggledPancakes

0

Java 버전 1.6.0_75가 없기 때문에 오타를 만든 것으로 보입니다. 자바 6의 마지막 업데이트는 업데이트 45 (6u45)입니다.

클래스 ZipPackagePropertiesMarshaller가 런타임에로드됩니다. NoClassDefFoundError 예외는 초기화 단계에서 발생합니다. 예외의 ClassNotFoundException를 있었다면, 그것은

ZipPackagePropertiesMarshaller는 버전 3.11와 3.9 사이에 변경되지 클래스 ... 달라졌을 것이지만, ZipPackagePropertiesMarshaller 확장 클래스 PackagePropertiesMarshaller이 변경됩니다 : 주요 변화에 StAX를의 사용과 관련하여 최신 버전.

StAX는 Java 6와 함께 제공되지만 Java 6 업데이트 18 (http://www.oracle.com/technetwork/java/javase/6u18-142093.html) 버전에는 StAX 1.2 API 버전이 도입되었습니다.

자바 6u18 이상을 사용하는 것을 고려하십시오. 이렇게하면 문제가 해결됩니다.

공식적인 FAQ에는 유사한 문제에 대한 몇 가지 징후가 있습니다 : https://poi.apache.org/faq.html#faq-N1017E.

또한 해결 방법은 가장 좋지 않습니다 (POI의 마지막 FAQ 참조).