更新到 Groovy 3.0.5 后,使用 Groovy 编译的 Jasper-Reports 将无法编译

After Updating to Groovy 3.0.5 Jasper-Reports compiled with Groovy won't compile

我将 Groovy 从 2.5.10 更新到 3.0.5 以及使用 groovy (language="groovy") 生成的 Jasper-Reports 并使用 groovy 语法将不再编译。我收到以下异常:

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.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

我正在使用 jasperreports 版本 6.13.0(最新版本),它应该与 groovy 3.0.5 一起使用。当我切换回 groovy 2.5.10 时一切正常。

有人遇到过同样的问题吗?是 JasperCompiler 的问题吗?

JasperReports 6.13.0 不能 使用 Groovy 3.x。它将 Groovy 2.4.16 列为依赖项,请参阅 here

Groovy 3.x 支持可能会出现在未来的 JasperReports 版本中,但在那之前你唯一能做的就是手动修补 JasperReports 代码以使用 Groovy 3.x。唯一的代码更改(除了升级依赖版本)是在 this line 处将 extends 更改为 implements(因为 CompilationUnit.ClassgenCallback 从抽象 class 更改为Groovy 3.x).

中的界面

JasperReports 已于 2021 年 5 月升级到 6.17.0。新版本适用于 Groovy 3.