e.g。我们得到了:
net.sf.jasperreports.engine.JRException: ...
Caused by: net.sf.jasperreports.engine.fill.JRExpressionEvalException:
Error evaluating expression for source text:
$P{REPORT_SCRIPTLET}.setTestRaw_LogOn_TstMsgOn(true, true)
Caused by: java.lang.LinkageError: loader constraint violation: loader
(instance of java/net/FactoryURLClassLoader) previously initiated loading
for a different type with name "org/slf4j/Logger"
在 Eclipse(Kepler)预览版中使用JR插件v6.1.0 运行,但不在运行5.5.1.final的其他Eclipse
显然我们正在使用一些构建路径引用的自定义报告scriptlet,它本身使用slf4j api进行日志记录。
它似乎与同一个类的另一个不同版本冲突(对于相同的底层类加载隔离)。
答案 0 :(得分:3)
我遇到了同样的问题,我通过在项目中的Build路径中添加这些Jars来解决它:
并将JasperReports Library
和JasperReports Library Dependencies
添加到项目
使用这些步骤
答案 1 :(得分:1)
对我们来说最简单的解决方案(在摆弄库和设置之后)是使用Jasper插件v5.5.1.final切换回Eclipse dir备份版本(我们仍然拥有所有开发人员的副本)。
"还原"并不容易。通过Eclipse安装历史记录,因为我们的基础更新站点仅指向最新版本,或者根本不存在5.5.1.final的旧更新站点。 (我们没有进一步调查)
(顺便说一下:在Eclipse中禁用自动更新以避免此类意外可能是安全的)
(......可能会找到其他工作解决方案的原因。)
对于我们来说, org.slf4j.Logger 的使用( slf4j-api-1.7.5.jar 和 slf4j-simple构建路径中的-1.7.5.jar 或者都已删除 - 无关紧要......只需在没有重新启动Eclipse的情况下关闭并重新打开所有报告)
使用 eclipse.ini jvm选项-verbose:class
运行Eclipse会显示冲突可能与此其他已加载的类有关(无论何时加载(可能由jasper预览编辑器本身使用) :eclipse/plugins/org.slf4j.api_1.7.2.v20121108-1250.jar
)
我假设Jasper从v6开始使用SLF4J,并且不会将其报表特定类/ libs 的类加载与其自己的类版本(或Eclipse安装提供的类加载器)中的单独类加载器隔离开来)因此可能会导致这种连锁错误(例如How to deal with LinkageErrors in Java?。)。
已经有一个已知的已解决的错误6.0.4(我添加了这些信息),但显然没有解决: http://community.jaspersoft.com/jaspersoft-studio/issues/3831#comment-818386
答案 2 :(得分:0)
(Whoo ...最后至少有一个可接受的解决方法,因为这个 groovy类加载问题 已经找到了)
我们创建了一些非常简单的帮助报告hlprep.jrxml
本身
使用上述的scriptlet
将其设为language=java
language=groovy
切换到java
以摆脱上述错误,但这通常不是一种选择)(现在它应该在Preview
)
每次遇到此错误(由于类加载可能是正确的,可能是随机的,具体取决于您之前在IDE中执行的操作),现在我们可以执行以下操作:
打开hlprep.jrxml
Open with ... JasperReports Preview
(因此您无需在后续步骤中明确打开预览)重启您的Eclipse
选择/预览hlprep.jrxml
选择/预览(已经打开)其他失败的报告
即使在更改后也应该正常运行,但如果再次打开/关闭新的,则可能会失败。 (因为类可能会被回收,或者groovy类加载器隔离魔法加载它不同)
pom.xml
Jaspersoft Server Library
,JasperReports Library Dependencies
jasperreports-6.3.0.jar
中有pom.xml
,有些(不是通过某些公共Maven仓库可用)服务器jars 为{{1到项目(我们从服务器复制)User Library