2013-10-15 1 views
3

JasperReports 5.2아파치 poi 3.7을 서버 lib 폴더에 사용하고 있습니다. 나는 다른 버전의 poi을 서버 lib에 가지고 있지 않다. 엑셀 보고서를 생성하려고 할 때 오류가 발생합니다.JasperReports 5.2가 poi-3.7와 작동하지 않습니다

java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFWorkbook.getCreationHelper()Lorg/apache/poi/ss/usermodel/CreationHelper; 

아래 링크를 통해이 jar 파일에서이 방법을 사용할 수 있습니다.

http://grepcode.com/file/repo1.maven.org/maven2/org.apache.poi/poi/3.7/org/apache/poi/hssf/usermodel/HSSFWorkbook.java?av=f

+0

classpath에 * poi * 라이브러리가 여러 개있을 수 있습니다. 서버 응용 프로그램에이 라이브러리의 다른 버전이 포함되어있을 수 있습니다. –

+0

* JasperReports API 5.2 *가 * org.apache.poi 3.7 * –

+0

@AlexK를 사용하고 있습니다. 서버 lib의 다른 jar 이름과 함께 오래된 poi jar 내용을 가졌습니다. 나는 그것을 제거하고 나는 어떤 오류도 지금 얻고 있지 않다. – Venu

답변

3

이것은 the Apache POI FAQ has an entry for it는, even includes code to work out what's wrong

기본적으로, 다른 곳 (아마도 서버에서) 클래스 패스에, 아파치 POI의 이전 복사본이 있다고 충분히 일반적인 문제입니다. 코드가 실행되면 클래스 로딩이 시작되고 클래스 로더는 새로운 것이 아닌 이전 jar를 유용하게 선택합니다.

당신 run the code from the FAQ이 경우 POI의 코어가로드되는 위치

ClassLoader classloader = 
    org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader(); 
URL res = classloader.getResource(
     "org/apache/poi/poifs/filesystem/POIFSFileSystem.class"); 
String path = res.getPath(); 
System.out.println("Core POI came from " + path); 

이 그런 다음 당신을 말할 것이다. 나는 그것이 당신이 기대하는 항아리가 아닐 것이라는 점을 사실상 보장 할 수 있습니다 ... 오래된 POI 항아리 (모두 다!)를 치십시오. 그러면 당신은 잘 가야합니다.

음, 대부분 좋은 것으로 간주됩니다. Apache POI 3.7 is 3 years oldfixes since then이 많이 있으므로 업그레이드 할 가치가 있습니다.

+0

내 서버에는 다른 이름이지만 이전 poi jar 내용의 jar 파일이 있습니다. 내가 4 줄 이상의 코드를 실행할 때까지 나는 이것을 깨닫지 못했다. 그 jar 파일을 제거하고 jasper 5.2가 poi 3.7와 작업 중입니다. 고맙습니다 ! – Venu