I updated Groovy from 2.5.10 to 3.0.5 and the Jasper-Reports that are generated using groovy (language="groovy") and use groovy syntax won't compile anymore. I get the following exception:
Caused by: java.lang.IncompatibleClassChangeError: Failed to link net/sf/jasperreports/compilers/JRGroovyCompiler$ClassCollector (Module "xxx.ear" from Service Module Loader): class net.sf.jasperreports.compilers.JRGroovyCompiler$ClassCollector has interface org.codehaus.groovy.control.CompilationUnit$ClassgenCallback as super class
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
at java.lang.ClassLoader.defineClass(ClassLoader.java:1017) ~[?:?]
at java.lang.ClassLoader.defineClass(ClassLoader.java:1096) ~[?:?]
at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:424) ~[?:?]
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:555) ~[?:?]
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:339) ~[?:?]
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:126) ~[?:?]
at org.jboss.modules.Module.loadModuleClass(Module.java:731) ~[?:?]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:247) ~[?:?]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410) ~[?:?]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) ~[?:?]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116) ~[?:?]
at net.sf.jasperreports.compilers.JRGroovyCompiler.compileUnits(JRGroovyCompiler.java:115) ~[jasperreports-6.13.0.jar:6.13.0-46ada4d1be8f3c5985fd0b6146f3ed44caed6f05]
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:226) ~[jasperreports-6.13.0.jar:6.13.0-46ada4d1be8f3c5985fd0b6146f3ed44caed6f05]
at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:358) ~[jasperreports-6.13.0.jar:6.13.0-46ada4d1be8f3c5985fd0b6146f3ed44caed6f05]
at net.sf.jasperreports.engine.JasperCompileManager.compileToStream(JasperCompileManager.java:327) ~[jasperreports-6.13.0.jar:6.13.0-46ada4d1be8f3c5985fd0b6146f3ed44caed6f05]
at net.sf.jasperreports.engine.JasperCompileManager.compileToStream(JasperCompileManager.java:310) ~[jasperreports-6.13.0.jar:6.13.0-46ada4d1be8f3c5985fd0b6146f3ed44caed6f05]
at net.sf.jasperreports.engine.JasperCompileManager.compileReportToStream(JasperCompileManager.java:588) ~[jasperreports-6.13.0.jar:6.13.0-46ada4d1be8f3c5985fd0b6146f3ed44caed6f05]
at
I'm using jasperreports version 6.13.0 (newest version) that should work with groovy 3.0.5. When I switch back to groovy 2.5.10 everything works fine.
Anyone had the same problem? Is it a Problem in JasperCompiler?
JasperReports 6.13.0 does not work with Groovy 3.x. It lists Groovy 2.4.16 as dependency, see here.
Groovy 3.x support will probably come in a future JasperReports version, but until then the only thing that you can do is to manually patch the JasperReports code to work with Groovy 3.x. The only code change (other than upgrading the dependency version) is to change extends
into implements
at this line (as CompilationUnit.ClassgenCallback
changed from an abstract class into an interface in Groovy 3.x).