日期:2014-05-17  浏览次数:20882 次

JasperReports使用Scriptlet时,JRAbstractScriptlet的每个方法被执行了两次
在JasperReports中使用了scriptlet,发现继承自JRAbstractScriptlet 的每一个方法对于每一条记录都被执行了两次,而实际上只会被执行一次。后来发现这是classpath下有两个“重复”的jar包导致的。我把JasperReports3.6.1发行包dist下的jasperreports-3.6.1.jar和jasperreports-javaflow-3.6.1.jar两个jar包都放到了工程lib下,这两个jar包里的内容很多是相同的,它们也都有net.sf.jasperreports.engine.JRAbstractScriptlet类。删除jasperreports-javaflow-3.6.1.jar后就正常了(在JasperReports网站发行包下载页已标注该包是Optional)。
至少到3.6.1版本,都还有这个问题,也算是一个Bug了,因为通常情况下,系统找到一个可用的类后就不会再到其他的jar包里寻找了,而JasperReports会继续到其他的jar包中寻找同样可用的类。