jboss JasperReport在WildFly中找不到符号JREvaluator,无需服务器即可工作

beq87vna  于 2023-05-17  发布在  其他
关注(0)|答案(2)|浏览(148)

最近我一直在与碧玉一起研究报告生成。我已经创建了一个简单的程序来测试它,当通过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选项-也没有改变任何东西,但曾经导致NullPointerExceptionjasperreport库中。用于测试程序-在两种情况下均有效
  • 添加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-这会导致不同的错误,即NoSuchMethodErrororg.eclipse.jdt.internal.compiler.ICompilerRequestor和其他一些错误。但是这个库应该不是必需的,因为据我所知,jasperreport-6.13.0.jar已经包含了它的编译器,并且很长一段时间以来都不需要单独的编译器库。
    尚未尝试的内容:
  • 强制加载类(http://www.java2s.com/Code/Java/Reflection/Forcethegivenclasstobeloadedfully.htm
  • 在运行时动态加载jar或使用自定义类加载器
    **更新:在查看this答案并应用建议后,缺少的类是不同的。这表明jasperreport.jar内部的依赖项没有正确加载
eeq64g8w

eeq64g8w1#

我已经想明白了
由于某些原因,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
42fyovps

42fyovps2#

我遇到了同样的问题,我的项目执行(由碧玉库)Jasper Report。
在我的IDE和JBoss服务器上没有问题,但是当我在WildFly上部署时,问题出现了。
我只需要将jasper-compiler-jdt.jar添加到项目库中,最后就可以在WildFly上工作了。

相关问题