4

我在服务器 lib 文件夹中使用JasperReports 5.2Apache poi 3.7 。我在服务器库中没有任何其他版本的poi 。当我尝试生成Excel报告时,出现以下错误。

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

4

3 回答 3

4

这是一个非常普遍的问题,Apache POI FAQ 有一个条目,它甚至包括代码来找出问题所在

基本上,在你的类路径的其他地方(可能来自你的服务器),有一个旧的 Apache POI 副本。当您的代码运行时,它会触发类的加载,并且您的类加载器会毫无帮助地选择较旧的 jar,而不是较新的 jar。

如果您运行常见问题解答中的代码

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 已经 3 年了,所以从那时起已经有很多修复,值得考虑升级!

于 2013-10-16T11:08:25.357 回答
2

您可以通过检查 Jasper 的相关 maven 存储库来查看相应的 apache poi 版本。

我碰巧在 Jasper 6.1 上:

http://repo2.maven.org/maven2/net/sf/jasperreports/jasperreports/6.1.0/jasperreports-6.1.0.pom

它指向 apache poi 3.10.1。

如果没有匹配的版本,您可能会遇到各种奇怪的事情。是的,这个词是我编的。

于 2015-12-07T17:22:07.847 回答
0

我正在将iReport 5.5.0与下面的 jar 一起使用...

poi-3.13.jar
jasperreports-5.0.4.jar
jackson-all-1.9.0.jar

它工作正常......

于 2018-03-13T05:26:22.957 回答