Re: Error in Java 25

Jochen Theodorou <[email protected]> Fri, 10 Oct 2025 17:36:02 +0200
Newsgroups gmane.comp.lang.groovy.user
Message-ID <[email protected]>
The problem is the following:

* we read classfiles
* they have a bytecode version, that depends on the version of Java,=20
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=20
the release of that asm lib
* Java nowadays changes the bytecode version with almost every major relea=
se
* 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=20
from Java. But the next lts version of Java that supports the class file=
=20
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!
>=20
> That said I found this: https://openjdk.org <https://openjdk.org>
>=20
> Is it possible the open source world can take this JVM code and take it=
=20
> in an own, fully backwards compatible direction, so that we can avoid=20
> problems like this ?
>=20
> Tommy Svensson
>=20
> [email protected] <mailto:[email protected]>
>=20
>=20
>=20
>=20
> Fr=C3=A5n: Blake McBride <[email protected]> <mailto:[email protected]=
om>
> Svara: users-GSC0n/0aZo1d/SJB6HiN2Ni2O/[email protected] <users-GSC0n/0aZo1d/SJB6HiN2Ni2O/[email protected]>=20
> <mailto:users-GSC0n/0aZo1d/SJB6HiN2Ni2O/[email protected]>
> Datum: 10 oktober 2025 at 01:26:18
> Till: users-GSC0n/0aZo1d/SJB6HiN2Ni2O/[email protected] <users-GSC0n/0aZo1d/SJB6HiN2Ni2O/[email protected]>=20
> <mailto:users-GSC0n/0aZo1d/SJB6HiN2Ni2O/[email protected]>
> =C3=84mne: Re: Error in Java 25
>=20
>> I fixed the problem by upgrading to Groovy 4.0.28
>>
>> On Thu, Oct 9, 2025 at 4:45=E2=80=AFPM Blake McBride <[email protected]=
om=20
>> <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: =C2=A04.0.26
>>     Java: =C2=A025
>>     Apache tomcat: 11.0.8
>>
>>     I get the error when trying to run a .groovy file.=C2=A0 So, it isn=
't
>>     a .class file.=C2=A0 The Groovy file has not been compiled.=C2=A0 A=
gain,
>>     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.do=
PhaseOperation(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:3=
65)
>>     at
>>     groovy.lang.GroovyClassLoader.lambda$parseClass$2(GroovyClassLoader=
.java:314)
>>     at
>>     org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(Stam=
pedCommonCache.java:163)
>>     at
>>     org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(St=
ampedCommonCache.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.j=
ava:265)
>>     at
>>     org.kissweb.restServer.MainServlet.initializeSystem(MainServlet.jav=
a:352)
>>     at
>>     org.kissweb.restServer.StartupListener.contextInitialized(StartupLi=
stener.java:37)
>>     at
>>     org.apache.catalina.core.StandardContext.listenerStart(StandardCont=
ext.java:4015)
>>     at
>>     org.apache.catalina.core.StandardContext.startInternal(StandardCont=
ext.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:65=
2)
>>     at
>>     org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:92=
6)
>>     at
>>     org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.jav=
a:1842)
>>     at java.base/
>>     java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:=
545)
>>     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:32=
8)
>>     at
>>     org.apache.tomcat.util.threads.InlineExecutorService.execute(Inline=
ExecutorService.java:75)
>>     at java.base/
>>     java.util.concurrent.AbstractExecutorService.submit(AbstractExecuto=
rService.java:125)
>>     at
>>     org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:7=
30)
>>     at
>>     org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:3=
81)
>>     at org.apache.catalina.startup.HostConfig.start(HostConfig.java:158=
2)
>>     at
>>     org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.ja=
va:265)
>>     at
>>     org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(Lifecycle=
Base.java:109)
>>     at
>>     org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBa=
se.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.ja=
va:769)
>>     at
>>     org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164=
)
>>     at
>>     org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBas=
e.java:1164)
>>     at
>>     org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBas=
e.java:1160)
>>     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:32=
8)
>>     at
>>     org.apache.tomcat.util.threads.InlineExecutorService.execute(Inline=
ExecutorService.java:75)
>>     at java.base/
>>     java.util.concurrent.AbstractExecutorService.submit(AbstractExecuto=
rService.java:149)
>>     at
>>     org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.=
java:716)
>>     at
>>     org.apache.catalina.core.StandardEngine.startInternal(StandardEngin=
e.java:203)
>>     at
>>     org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164=
)
>>     at
>>     org.apache.catalina.core.StandardService.startInternal(StandardServ=
ice.java:412)
>>     at
>>     org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164=
)
>>     at
>>     org.apache.catalina.core.StandardServer.startInternal(StandardServe=
r.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(DirectMethod=
HandleAccessor.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(AsmDeco=
mpiler.java:83)
>>     at
>>     org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassN=
odeResolver.java:255)
>>     at
>>     org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScr=
ipt(ClassNodeResolver.java:193)
>>     at
>>     org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNo=
deResolver.java:175)
>>     at
>>     org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNode=
Resolver.java:129)
>>     at
>>     org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVi=
sitor.java:782)
>>     at
>>     org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.j=
ava:423)
>>     at
>>     org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisito=
r.java:1240)
>>     at
>>     org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVi=
sitor.java:258)
>>     at
>>     org.codehaus.groovy.control.CompilationUnit.lambda$addPhaseOperatio=
ns$3(CompilationUnit.java:207)
>>     at
>>     org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.do=
PhaseOperation(CompilationUnit.java:897)
>>     ... 50 more
>>