App crash in production after Jakarta changes

76 views Asked by At

I had recently upgraded from javax to jakarta. I had alongside upgrade to tomcat 10, spring 6 and spring-boot 3. The app build and runs fine locally with no issues. However, it builds and gets deployed to production but then crashes with the following logs.

ERR java.lang.instrument.IllegalClassFormatException: Error while instrumenting org/springframework/boot/loader/launch/JarLauncher.
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at org.jacoco.agent.rt.internal_f3994fa.CoverageTransformer.transform(CoverageTransformer.java:94)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.instrument/java.lang.instrument.ClassFileTransformer.transform(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.instrument/sun.instrument.TransformerManager.transform(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.instrument/sun.instrument.InstrumentationImpl.transform(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.base/java.lang.ClassLoader.defineClass1(Native Method)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.base/java.security.SecureClassLoader.defineClass(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.base/java.lang.Class.forName0(Native Method)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.base/java.lang.Class.forName(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.base/sun.launcher.LauncherHelper.loadMainClass(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR Caused by: java.io.IOException: Error while instrumenting org/springframework/boot/loader/launch/JarLauncher.
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at org.jacoco.agent.rt.internal_f3994fa.core.instr.Instrumenter.instrumentError(Instrumenter.java:160)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at org.jacoco.agent.rt.internal_f3994fa.core.instr.Instrumenter.instrument(Instrumenter.java:110)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at org.jacoco.agent.rt.internal_f3994fa.CoverageTransformer.transform(CoverageTransformer.java:92)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR ... 16 more
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 61
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at org.jacoco.agent.rt.internal_f3994fa.asm.ClassReader.<init>(ClassReader.java:196)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at org.jacoco.agent.rt.internal_f3994fa.asm.ClassReader.<init>(ClassReader.java:177)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at org.jacoco.agent.rt.internal_f3994fa.asm.ClassReader.<init>(ClassReader.java:163)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at org.jacoco.agent.rt.internal_f3994fa.core.internal.instr.InstrSupport.classReaderFor(InstrSupport.java:280)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at org.jacoco.agent.rt.internal_f3994fa.core.instr.Instrumenter.instrument(Instrumenter.java:76)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR at org.jacoco.agent.rt.internal_f3994fa.core.instr.Instrumenter.instrument(Instrumenter.java:108)
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR ... 17 more
   2024-02-12T13:05:44.15+0530 [APP/PROC/WEB/0] ERR java.lang.instrument.IllegalClassFormatException: Error while instrumenting org/springframework/boot/loader/launch/ExecutableArchiveLauncher.

I have tried updating my jacoco agent to 0.8.11 which is the latest but still the same issue exists. Am I missing something ?

2

There are 2 answers

0
Alex Ezhil Arasu On BEST ANSWER

Fixed this issue. Noticed that most of these issues exists cause of your libraries and versions/dependencies you try to include and enforce a version with. On upgrading spring-dependency-management to 1.1.X (latest at the moment), the spring versions most compatible wit spring-boot 3.X.X are picked. Jacoco in turn might be picked if added in your mta/local code coverage, incrementing your gradle version also helps. Upgraded jacoco to 0.8.8. Upgraded to gradle 7.X.X.

3
mjn On

It seems the (production) Tomcat uses an older Java version than the one which was used by the Java compiler.

Major version 61 indicates Java 17.

Therefore the production Tomcat must use at least Java 17, which is also the minimum version required for Spring 6.

Related Questions in JAKARTA-MIGRATION