Search code examples
springspring-bootjacocotomcat10jakarta-migration

App crash in production after Jakarta changes


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 ?


Solution

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