What Jochen said but see also:

[#GROOVY-11757] Explore the use of asm-jdk-bridge for Groovy - ASF JIRA
https://share.google/CKb8mvYhLXTjUDQzE

This would allow us not to be so reliant on ASM versions.

Other details:
4.0.24 was the first version to support JDK24,
4.0.27 was the first 4 version to support JDK25,
4.0.29 will be the first 4 version to support JDK26


On Sat, Oct 11, 2025, 2:36 AM Jochen Theodorou <[email protected]> wrote:

> The problem is the following:
>
> * we read classfiles
> * they have a bytecode version, that depends on the version of Java,
> those classfiles have been compiled with
> * we use the asm lib to read those class files
> * asm can only read classfiles compatible with the bytecode version on
> the release of that asm lib
> * Java nowadays changes the bytecode version with almost every major
> release
> * if the bytecode version is too new you run into problems like:
>  >>     Caused by: java.lang.IllegalArgumentException: Unsupported class
>  >>     file major version 69
>  >>     at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:200)
>
> One thing that helps: upgrade Groovy.
>
> There is in theory a solution to this by using the new class file API
> from Java. But the next lts version of Java that supports the class file
> API is Java 25
>
> bye Jochen
>
>
> On 10/10/25 16:15, Tommy Svensson wrote:
> > Sorry, but I don't have anything to say about the specific problem!
> >
> > That said I found this: https://openjdk.org <https://openjdk.org>
> >
> > Is it possible the open source world can take this JVM code and take it
> > in an own, fully backwards compatible direction, so that we can avoid
> > problems like this ?
> >
> > Tommy Svensson
> >
> > [email protected] <mailto:[email protected]>
> >
> >
> >
> >
> > Från: Blake McBride <[email protected]> <mailto:[email protected]>
> > Svara: [email protected] <[email protected]>
> > <mailto:[email protected]>
> > Datum: 10 oktober 2025 at 01:26:18
> > Till: [email protected] <[email protected]>
> > <mailto:[email protected]>
> > Ämne: Re: Error in Java 25
> >
> >> I fixed the problem by upgrading to Groovy 4.0.28
> >>
> >> On Thu, Oct 9, 2025 at 4:45 PM Blake McBride <[email protected]
> >> <mailto:[email protected]>> wrote:
> >>
> >>     Hello,
> >>
> >>     I am trying to run an app that runs fine under Java 21 but will
> >>     not run under Java 25.
> >>     The problem appears to be Groovy.
> >>
> >>     Sure appreciate any help.
> >>
> >>
> >>     I am running the following:
> >>
> >>     Groovy:  4.0.26
> >>     Java:  25
> >>     Apache tomcat: 11.0.8
> >>
> >>     I get the error when trying to run a .groovy file.  So, it isn't
> >>     a .class file.  The Groovy file has not been compiled.  Again,
> >>     this code works fine under Java 8, 11, 17, and 21.
> >>
> >>     The error under Java 25:
> >>
> >>     09-Oct-2025 16:27:47.947 SEVERE [main]
> >>     org.apache.catalina.core.StandardContext.listenerStart Exception
> >>     sending context initialized event to listener instance of class
> >>     [org.kissweb.restServer.StartupListener]
> >>     BUG! exception in phase 'semantic analysis' in source unit '/
> >>     drive1/ROOT/home/blake/Stack360/Kiss/src/main/backend/
> >>     KissInit.groovy' Unsupported class file major version 69
> >>     at
> >>
>  
> org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:901)
> >>     at
> >>
>  
> org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:692)
> >>     at
> >>
>  org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:666)
> >>     at
> >>
>  groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:365)
> >>     at
> >>
>  groovy.lang.GroovyClassLoader.lambda$parseClass$2(GroovyClassLoader.java:314)
> >>     at
> >>
>  
> org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163)
> >>     at
> >>
>  
> org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154)
> >>     at
> >>     groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314)
> >>     at org.kissweb.restServer.GroovyClass.<init>(GroovyClass.java:59)
> >>     at
> >>
>  org.kissweb.restServer.GroovyService.loadGroovyClass(GroovyService.java:400)
> >>     at
> >>
>  org.kissweb.restServer.GroovyService.internalGroovy(GroovyService.java:265)
> >>     at
> >>
>  org.kissweb.restServer.MainServlet.initializeSystem(MainServlet.java:352)
> >>     at
> >>
>  
> org.kissweb.restServer.StartupListener.contextInitialized(StartupListener.java:37)
> >>     at
> >>
>  
> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4015)
> >>     at
> >>
>  
> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4438)
> >>     at
> >>     org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
> >>     at
> >>
>  org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:566)
> >>     at
> >>
>  org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
> >>     at
> >>
>  org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:926)
> >>     at
> >>
>  org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1842)
> >>     at java.base/
> >>
>  java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545)
> >>     at
> java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
> >>     at
> >>
>  
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
> >>     at java.base/
> >>
>  
> java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:125)
> >>     at
> >>
>  org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:730)
> >>     at
> >>
>  org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:381)
> >>     at
> org.apache.catalina.startup.HostConfig.start(HostConfig.java:1582)
> >>     at
> >>
>  org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:265)
> >>     at
> >>
>  
> org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
> >>     at
> >>
>  
> org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
> >>     at
> >>
>  org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336)
> >>     at
> >>
>  org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:743)
> >>     at
> >>
>  org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:769)
> >>     at
> >>     org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
> >>     at
> >>
>  
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1164)
> >>     at
> >>
>  
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1160)
> >>     at
> java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
> >>     at
> >>
>  
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
> >>     at java.base/
> >>
>  
> java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:149)
> >>     at
> >>
>  org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:716)
> >>     at
> >>
>  
> org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:203)
> >>     at
> >>     org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
> >>     at
> >>
>  
> org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
> >>     at
> >>     org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
> >>     at
> >>
>  
> org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:866)
> >>     at
> >>     org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
> >>     at org.apache.catalina.startup.Catalina.start(Catalina.java:759)
> >>     at java.base/
> >>
>  
> jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
> >>     at java.base/java.lang.reflect.Method.invoke(Method.java:565)
> >>     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
> >>     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
> >>     Caused by: java.lang.IllegalArgumentException: Unsupported class
> >>     file major version 69
> >>     at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:200)
> >>     at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:180)
> >>     at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:166)
> >>     at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:288)
> >>     at
> >>
>  
> org.codehaus.groovy.ast.decompiled.AsmDecompiler.parseClass(AsmDecompiler.java:83)
> >>     at
> >>
>  
> org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:255)
> >>     at
> >>
>  
> org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:193)
> >>     at
> >>
>  
> org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:175)
> >>     at
> >>
>  
> org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:129)
> >>     at
> >>
>  
> org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:782)
> >>     at
> >>
>  org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:423)
> >>     at
> >>
>  
> org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1240)
> >>     at
> >>
>  
> org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:258)
> >>     at
> >>
>  
> org.codehaus.groovy.control.CompilationUnit.lambda$addPhaseOperations$3(CompilationUnit.java:207)
> >>     at
> >>
>  
> org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:897)
> >>     ... 50 more
> >>
>
>

Reply via email to