2013-10-15 37 views
3

我正在使用JasperReports 5.2Apache poi 3.7在服務器lib文件夾中。我在服務器庫中沒有任何其他版本的poi。當我試圖生成Excel報告我收到以下錯誤。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

可能你有幾個版本的* poi *庫在classpath中。可能是你的服務器應用程序包含此lib的另一個版本 –

+0

* JasperReports API 5.2 *正在使用* org.apache.poi 3.7 * –

+0

@AlexK,我在服務器庫中有舊的poi jar內容和不同的jar名稱。我刪除了它,現在我沒有收到任何錯誤。 – Venu

回答

3

這是一個足夠常見問題the Apache POI FAQ has an entry for it,這even includes code to work out what's wrong

基本上,你的類路徑(可能是從你的服務器)其他地方,還有的Apache POI的舊副本。當你的代碼運行時,它會觸發該類的加載,而你的類加載器不會幫助選擇較舊的jar,而不是較新的jar。

如果run the code from the FAQ

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的核心正在從加載。我幾乎可以保證它不會是你所期望的那個罐子......將舊的POI罐子(所有這些罐子)都拿掉吧,那麼你應該很開心。

那麼,主要是好去。 Apache POI 3.7 is 3 years old所以有很多fixes since then,使它值得升級!

+0

在我的服務器中有一個不同名稱的jar文件,但是舊的poi jar內容。我沒有意識到這一點,直到我跑了四行以上的代碼。我刪除了那個jar文件,碧玉5.2正在使用poi 3.7。謝謝 ! – Venu

相關問題