最近我一直在和 Jasper 一起制作报告。我创建了一个简单的程序来测试它,当通过 IDE 运行它时,它工作得很好。
然后我将(非常短的)类移至 WildFly 服务器应用程序,尽管具有完全相同的代码和库生成失败,并显示
cannot find symbol
。它找不到的符号是 JREvaluator
、JRFillVariable
以及诸如 net.sf.jasperreports.engine
之类的包
到目前为止我已经确认:
jasperreports-6.13.0.jar
已添加到 war
(它与其他库一起存在于 /WEB-INF/lib
文件夹中,例如 gson
和 hibernate
jasperreports-6.13.0.jar
包含缺失的类在我看来,问题并不在于库未加载或缺少类(因为在测试环境中它可以工作),而是像某些东西阻止了 JBoss 类加载器加载这些类
尝试(但失败)的解决方案
清洁和构建
将
-Djava.awt.headless=true
添加到虚拟机选项 - 这并没有改变任何东西
将
-Djava.awt.headless=false
添加到 VM 选项 - 也没有改变任何事情,但曾经在 NullPointerException
库中导致 jasperreport
。对于测试程序 - 在两种情况下都有效
添加
commons-beanutils-1.9.4.jar
、commons-digester-2.1.jar
、commons-collections4-4.4.jar
和 commons-loggin-1.2.jar
- 没有任何更改
添加
jasper-compiler-jdt-5.5.23.jar
- 这会导致不同的错误,即 NoSuchMethodError
代表 org.eclipse.jdt.internal.compiler.ICompilerRequestor
和其他一些错误。然而,这个库应该不是必需的,因为根据我的理解,jasperreport-6.13.0.jar
已经包含它的编译器,并且很长一段时间以来不需要单独的编译器库。
尚未尝试过的:
更新:在查看this答案并应用建议后,缺少的课程有所不同。这表明依赖项inside
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 报告。
在我的 IDE 和 JBoss 服务器上没有问题,但是当我通过 WildFly 部署时出现问题。
我只需要将 jasper-compiler-jdt.jar 添加到项目库中,最后就可以在 WildFly 上运行了。
我遇到了同样的问题,使用 Spring Boot 在本地一切正常,但在 Docker 中运行时失败。添加以下依赖项解决了问题: 实现 'net.sf.jasperreports:jasperreports-jdt:7.0.1' 实现 'org.eclipse.jdt:ecj:3.21.0'