首页 文章

JasperReports 5.2不适用于poi-3.7

提问于
浏览
3

我在服务器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文件中看到此方法 .

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

3 回答

  • 2

    这是一个足够常见的问题,the Apache POI FAQ has an entry for iteven 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的核心是从哪里加载的 . 我几乎可以保证它不会是你期望的 jar ......摧毁旧的POI jar (所有这些!),然后你应该好好去 .

    好吧,大多数情况下都很好 . Apache POI 3.7 is 3 years old所以有很多fixes since then,值得研究升级!

  • 0

    您可以通过检查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 .

    如果没有匹配的版本,您可能会遇到各种各样的诡计 . 是的,我说了这个词 .

  • 3

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

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

    and it works fine...

相关问题