java - JasperReport 在 WildFly 中找不到符号 JREvaluator,无需服务器即可工作
问题描述
最近我一直在用 Jasper 进行报告生成。我创建了一个简单的程序来测试它,当通过 IDE 运行它时它运行良好。
然后我将(非常短的)类移动到 WildFly 服务器应用程序,尽管代码和库生成完全相同,但cannot find symbol
. 那些它找不到的符号是JREvaluator
,JRFillVariable
以及包如net.sf.jasperreports.engine
到目前为止,我已经确认:
- 项目构建(意味着这些类对 javac 可见,但对 jvm 不可见)
jasperreports-6.13.0.jar
被添加到war
(它/WEB-INF/lib
与其他库一起存在于文件夹中,例如gson
和hibernate
jasperreports-6.13.0.jar
包含缺失的类
在我看来,问题不在于库未加载或缺少类(因为在测试环境中它可以工作),而是阻止 JBoss 类加载器加载这些类
尝试(和失败)的解决方案
清理和构建
添加
-Djava.awt.headless=true
到 VM 选项 - 这并没有改变任何东西添加
-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
fororg.eclipse.jdt.internal.compiler.ICompilerRequestor
和其他一些错误。然而,这个库不应该是必需的,因为据我了解 -jasperreport-6.13.0.jar
已经包含它的编译器,并且长期以来不需要编译器的单独库。
未尝试的内容:
- 强制加载类(http://www.java2s.com/Code/Java/Reflection/Forcethegivenclasstobeloadedfully.htm)
- 在运行时动态加载 jar 或使用自定义类加载器
更新:查看此答案并应用建议后,缺失的课程有所不同。这表明内部 jasperreport.jar
的依赖项没有正确加载
解决方案
我想通了
由于某种原因,jasperreport.jar 使用的服务器项目库没有加载,但在测试项目中它们是(可能是由于 WildFly,可能是由于 IntelliJ 和 NetBeans 之间的差异)
这是库列表,基于pom.xml
我添加的 jasperreport.jar 中的文件。有些可能不是必需的,并且列表可能并不详尽(一旦报告开始生成,我基本上就停止添加库)但是如果其他人遇到这个问题,它就足够了:
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
推荐阅读
- windows - 无法启动 PostgreSQL 11.2。尝试删除所有内容,现在 PostgreSQL 11.2 拒绝安装并出现错误
- react-native - 在反应本机导航中动态更改标题标题
- tensorflow - tensorflow 或 keras 中语音帧的上下文扩展
- windows - 无法卸载新更新 KB:4489881 (Windows 8.1)
- javascript - 在 LARAVEL 中使用 JS 数组通过 AJAX 将 HTML 动态插入视图
- python - postgresql auth django(用户“BlogAdmin2”的密码验证失败)
- javascript - 属性“cacheLocation”的类型不兼容
- scala - 用先前的字段值填充 DataFrame 中的空白字段
- c# - Xamarin ADAL AcquireTokenAsync 不返回结果!OnActivityResult 被击中
- batch-file - 是否可以使用批处理隐藏 Windows 复制文件窗口?