Eclipse 如何使用JasperReports(6.*)解决LinkageError?
e、 g.我们得到:Eclipse 如何使用JasperReports(6.*)解决LinkageError?,eclipse,jasper-reports,slf4j,Eclipse,Jasper Reports,Slf4j,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:
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"
使用JR插件v6.1.0在Eclipse(开普勒)预览版中运行,但在另一个Eclipse使用5.5.1.final运行时不运行
显然,我们使用的是一些构建路径引用的自定义报表scriptlet,它本身使用slf4j api进行日志记录
它似乎与同一类的另一个不同版本相冲突(对于相同的底层类加载隔离)。对我们来说,最简单的解决方案是使用Jasper插件v5.5.1切换回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.v201108-1250.jar
)
我假设Jasper从v6开始使用SLF4J,并且没有使用单独的类加载器将其报表特定类/lib的类加载与自己的类版本(或Eclipse安装提供的版本)隔离开来,因此可能会导致此类链接错误(例如…)
6.0.4(我在其中添加了这些信息)中已经有一个已知已解决的bug,但显然没有解决:
我也遇到了同样的问题,我通过在我的项目的构建路径中添加这些JAR解决了这个问题:
- slf4j-api-1.7.12.jar
- slf4j-log4j12-1.7.12.jar
- slf4j-simple-1.7.12.jar
并将
JasperReports库
和JasperReports库依赖项
添加到项目中
通过这些步骤
addexternaljar
addlibrary
订购并导出
,检查新添加的库和jar并单击确定hlprep.jrxml
,它本身
- 使用前面提到的scriptlet
- 或者使用/调用任何其他您可能遇到问题的java类
- 将其设置为
language=java
- (其他网站建议从
切换到language=groovy
,以消除上述错误,但这通常不是一个选项)java
- (其他网站建议从
预览中正常运行了
)
每次遇到此错误时(可能是随机的,因为类加载可能是正确的,这取决于您以前在IDE中所做的操作),我们现在可以执行以下操作:
hlprep.jrxml
- 最好使用
(这样您就不必在后续步骤中明确打开预览)打开,使用…JasperReports Preview
- 它应该记住重新启动后打开的文件,否则重新启动后必须首先打开helper报告
hlprep.jrxml
- 现在正确的类加载发生了(由“java”上下文触发)
- 日食霓虹灯3
- 在内部使用Groovy 2.4.5
- 从JDK1.8.0_121开始
- Jaspersoft Studio 6.3.2.1决赛
- 我们有一台6.3.0服务器,但在6.3.1中添加了对Neon的全面支持,因此我们采用了最后一个补丁版本6.3.x
- 我们以前遇到过一些问题,较新的studio版本无法与较旧的服务器配合使用,因此我们在升级时会更加小心
- 可能不相关:
- 在
pom.xml
- 我们都提供了添加到项目中的jasper库:
,Jaspersoft服务器库
JasperReports库依赖项
- 我们还依赖于服务器功能,因此在
中也有pom.xml
,还有一些(不是通过一些公共Maven repo可用的)服务器jar作为jasperreports-6.3.0.jar
添加到项目中(我们从服务器复制过来)用户库
pom.xml
- 在