JasperReport在WildFly中找不到符号JREvaluator,在没有服务器的情况下工作



最近我一直在使用Jasper进行报告生成。我创建了一个简单的程序来测试它,当通过IDE运行它时,它确实运行得很好。

然后,我将(非常短的(类移到了WildFly服务器应用程序中,尽管有完全相同的代码和库,但cannot find symbol的生成失败了。它找不到的符号是JREvaluatorJRFillVariable以及net.sf.jasperreports.engine等包

到目前为止,我已经确认:

  • 项目构建(意味着这些类对javac可见,但对jvm不可见(
  • jasperreports-6.13.0.jar被添加到war中(它与其他库(如gsonhibernate(一起存在于/WEB-INF/lib文件夹中
  • jasperreports-6.13.0.jar包含缺失的类

在我看来,问题不在于库没有加载或缺少类(因为在测试环境中它是有效的(,而在于有什么东西阻止JBoss类加载器加载那些类

尝试(和失败(的解决方案

  • 清理并构建

  • -Djava.awt.headless=true添加到VM选项中-这并没有改变任何

  • -Djava.awt.headless=false添加到VM选项-也没有改变任何事情,但曾经导致jasperreport库中的NullPointerException。对于测试程序-在两种情况下都有效

  • 添加commons-beanutils-1.9.4.jarcommons-digester-2.1.jarcommons-collections4-4.4.jarcommons-loggin-1.2.jar,不变

  • 添加jasper-compiler-jdt-5.5.23.jar-这导致了不同的错误,即org.eclipse.jdt.internal.compiler.ICompilerRequestorNoSuchMethodError和其他一些错误。然而,这个库不应该是必要的,因为据我所知,jasperreport-6.13.0.jar已经包含了它的编译器,而且很长一段时间以来都不需要单独的编译器库。

尚未尝试的内容:

  • 强制加载类(http://www.java2s.com/Code/Java/Reflection/Forcethegivenclasstobeloadedfully.htm)
  • 在运行时动态加载jar或使用自定义类加载器

更新:看了这个答案并应用了建议后,缺少的类就不一样了。这表明jasperreport.jar内部的依赖项没有正确加载

我已经算出了

由于某种原因,jasperreport.jar在服务器项目中使用的库没有加载,但在测试项目中加载了(可能是由于WildFly,可能是由于IntelliJ和NetBeans之间的差异(

以下是库列表,基于我添加的jasperreport.jar中的pom.xml文件。有些可能不必要,列表可能也不详尽(一旦报告开始生成,我基本上就不再添加库了(,但如果其他人遇到这个问题,它就足够了:

  • commons-beanutils-1.9.4.jar
  • itext-2.1.7.jar
  • poi-ooxml-4.1.1.jar
  • commons-collections4-4.4.jar
  • jcommon-1.0.23.jar
  • xalan-2.7.2.jar
  • commons-digester-2.1.jar
  • jfreechart-1.0.19.jar
  • xmpcore-5.1.3.jar
  • commons-logging-1.2.jar
  • poi-4.1.1.jar

我也遇到了同样的问题,我的项目(通过jasper库(执行了一个jasper Report。

在我的IDE和JBoss服务器上,a没有问题,但当我通过WildFly部署时,问题出现了。

我只需要将jasper编译器jdt.jar添加到项目库中,最后就可以使用WildFly了。

相关内容

最新更新