我在服务器lib文件夹中使用JasperReports 5.2和Apache poi 3.7 . 我在服务器库中没有任何其他版本的poi . 当我尝试生成Excel报告时,我遇到了错误 .
java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFWorkbook.getCreationHelper()Lorg/apache/poi/ss/usermodel/CreationHelper;
我可以借助以下链接在此jar文件中看到此方法 .
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:
然后,它将告诉您POI的核心是从哪里加载的 . 我几乎可以保证它不会是你期望的 jar ......摧毁旧的POI jar (所有这些!),然后你应该好好去 .
好吧,大多数情况下都很好 . Apache POI 3.7 is 3 years old所以有很多fixes since then,值得研究升级!
您可以通过检查Jasper的相关maven repo来查看相应的apache poi版本 .
我碰巧在贾斯珀6.1:
http://repo2.maven.org/maven2/net/sf/jasperreports/jasperreports/6.1.0/jasperreports-6.1.0.pom
这指向apache poi 3.10.1 .
如果没有匹配的版本,您可能会遇到各种各样的诡计 . 是的,我说了这个词 .
我正在使用 iReport 5.5.0 与下面的jar ...
and it works fine...