Search code examples
spring-bootstruts2strutsjakarta-migrationstruts2-jquery-plugin

Spring Boot 3.1 + Apache Struts 7.0.0-M8 missing javax.servlet.http.HttpServletRequest


I have here an Application that uses Spring Boot 3.1 and Apache Struts 7.0.0-M8. I just can't get them to run as the Java classloader persistently tries to load the javax. HttpServletRequest instead instead of the Jakarta Servlet.

I debugged the code, upgraded dependencies, checked for any usages. Multiple times deleted my gradle cache and invalidated my IntelliJ cache.
Where is that call even coming from? The only hunch I have is that none is loaded and it defaults to javax which it can't find. But if that is the case should I make it available on start up in my spring-boot configuration?

What can I do?

Here the Dependency Tree:

annotationProcessor - Annotation processors and their dependencies for source set 'main'.
+--- org.springframework.boot:spring-boot-configuration-processor:3.3.1
\--- org.projectlombok:lombok:1.18.30

bootArchives - Configuration for Spring Boot archive artifacts. (n)
No dependencies

compileClasspath - Compile classpath for source set 'main'.
+--- jakarta.servlet:jakarta.servlet-api:6.1.0
+--- org.springframework.boot:spring-boot-dependencies:3.3.1
+--- org.ow2.asm:asm:9.7
+--- jakarta.el:jakarta.el-api:6.0.0
+--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.2
|    \--- jakarta.activation:jakarta.activation-api:2.1.3
+--- jakarta.annotation:jakarta.annotation-api:3.0.0
+--- org.glassfish.jaxb:jaxb-runtime:4.0.5
|    \--- org.glassfish.jaxb:jaxb-core:4.0.5
|         +--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.2 (*)
|         +--- jakarta.activation:jakarta.activation-api:2.1.3
|         +--- org.glassfish.jaxb:txw2:4.0.5
|         \--- com.sun.istack:istack-commons-runtime:4.1.2
+--- jakarta.activation:jakarta.activation-api:2.1.3
+--- org.springframework:spring-core:6.1.11
|    \--- org.springframework:spring-jcl:6.1.11 -> 6.1.10
+--- org.springframework.boot:spring-boot-starter-web:3.3.1
|    +--- org.springframework.boot:spring-boot-starter:3.3.1
|    |    +--- org.springframework.boot:spring-boot:3.3.1
|    |    |    +--- org.springframework:spring-core:6.1.10 -> 6.1.11 (*)
|    |    |    \--- org.springframework:spring-context:6.1.10
|    |    |         +--- org.springframework:spring-aop:6.1.10
|    |    |         |    +--- org.springframework:spring-beans:6.1.10
|    |    |         |    |    \--- org.springframework:spring-core:6.1.10 -> 6.1.11 (*)
|    |    |         |    \--- org.springframework:spring-core:6.1.10 -> 6.1.11 (*)
|    |    |         +--- org.springframework:spring-beans:6.1.10 (*)
|    |    |         +--- org.springframework:spring-core:6.1.10 -> 6.1.11 (*)
|    |    |         +--- org.springframework:spring-expression:6.1.10
|    |    |         |    \--- org.springframework:spring-core:6.1.10 -> 6.1.11 (*)
|    |    |         \--- io.micrometer:micrometer-observation:1.12.7 -> 1.13.1
|    |    |              \--- io.micrometer:micrometer-commons:1.13.1
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:3.3.1
|    |    |    \--- org.springframework.boot:spring-boot:3.3.1 (*)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:3.3.1
|    |    |    +--- ch.qos.logback:logback-classic:1.5.6
|    |    |    |    +--- ch.qos.logback:logback-core:1.5.6
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.13
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.23.1
|    |    |    |    +--- org.apache.logging.log4j:log4j-api:2.23.1 -> 2.23.0
|    |    |    |    \--- org.slf4j:slf4j-api:2.0.9 -> 2.0.13
|    |    |    \--- org.slf4j:jul-to-slf4j:2.0.13
|    |    |         \--- org.slf4j:slf4j-api:2.0.13
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1 -> 3.0.0
|    |    +--- org.springframework:spring-core:6.1.10 -> 6.1.11 (*)
|    |    \--- org.yaml:snakeyaml:2.2
|    +--- org.springframework.boot:spring-boot-starter-json:3.3.1
|    |    +--- org.springframework.boot:spring-boot-starter:3.3.1 (*)
|    |    +--- org.springframework:spring-web:6.1.10
|    |    |    +--- org.springframework:spring-beans:6.1.10 (*)
|    |    |    +--- org.springframework:spring-core:6.1.10 -> 6.1.11 (*)
|    |    |    \--- io.micrometer:micrometer-observation:1.12.7 -> 1.13.1 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-databind:2.17.1
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.17.1
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.17.1
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-annotations:2.17.1 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-core:2.17.1 (c)
|    |    |    |         +--- com.fasterxml.jackson.core:jackson-databind:2.17.1 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.17.1 (c)
|    |    |    |         +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.1 (c)
|    |    |    |         \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.17.1 (c)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.17.1
|    |    |    |    \--- com.fasterxml.jackson:jackson-bom:2.17.1 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.17.1 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.17.1
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.17.1 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.17.1 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.17.1 (*)
|    |    +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.1
|    |    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.17.1 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.17.1 (*)
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.17.1 (*)
|    |    |    \--- com.fasterxml.jackson:jackson-bom:2.17.1 (*)
|    |    \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.17.1
|    |         +--- com.fasterxml.jackson.core:jackson-core:2.17.1 (*)
|    |         +--- com.fasterxml.jackson.core:jackson-databind:2.17.1 (*)
|    |         \--- com.fasterxml.jackson:jackson-bom:2.17.1 (*)
|    +--- org.springframework.boot:spring-boot-starter-tomcat:3.3.1
|    |    +--- jakarta.annotation:jakarta.annotation-api:2.1.1 -> 3.0.0
|    |    +--- org.apache.tomcat.embed:tomcat-embed-core:10.1.25
|    |    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.25
|    |    \--- org.apache.tomcat.embed:tomcat-embed-websocket:10.1.25
|    |         \--- org.apache.tomcat.embed:tomcat-embed-core:10.1.25
|    +--- org.springframework:spring-web:6.1.10 (*)
|    \--- org.springframework:spring-webmvc:6.1.10
|         +--- org.springframework:spring-aop:6.1.10 (*)
|         +--- org.springframework:spring-beans:6.1.10 (*)
|         +--- org.springframework:spring-context:6.1.10 (*)
|         +--- org.springframework:spring-core:6.1.10 -> 6.1.11 (*)
|         +--- org.springframework:spring-expression:6.1.10 (*)
|         \--- org.springframework:spring-web:6.1.10 (*)
+--- org.springframework.boot:spring-boot-starter-tomcat:3.3.1 (*)
+--- org.glassfish.web:jakarta.servlet.jsp.jstl:3.0.1
+--- jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.0
|    +--- jakarta.servlet:jakarta.servlet-api:6.0.0 -> 6.1.0
|    \--- jakarta.el:jakarta.el-api:5.0.0 -> 6.0.0
+--- org.apache.tomcat.embed:tomcat-embed-jasper:10.1.25
|    +--- org.apache.tomcat.embed:tomcat-embed-core:10.1.25
|    +--- org.apache.tomcat.embed:tomcat-embed-el:10.1.25
|    \--- org.eclipse.jdt:ecj:3.33.0
+--- org.apache.logging.log4j:log4j-api:2.23.0
+--- org.apache.logging.log4j:log4j-core:2.23.1
|    \--- org.apache.logging.log4j:log4j-api:2.23.1 -> 2.23.0
+--- org.apache.struts:struts2-core:7.0.0-M8
|    +--- org.freemarker:freemarker:2.3.33
|    +--- com.github.ben-manes.caffeine:caffeine:3.1.8
|    |    +--- org.checkerframework:checker-qual:3.37.0
|    |    \--- com.google.errorprone:error_prone_annotations:2.21.1 -> 2.27.0
|    +--- ognl:ognl:3.3.5
|    |    \--- org.javassist:javassist:3.29.0-GA
|    +--- org.apache.logging.log4j:log4j-api:2.23.1 -> 2.23.0
|    +--- org.apache.commons:commons-fileupload2-jakarta-servlet6:2.0.0-M2
|    |    +--- org.apache.commons:commons-fileupload2-core:2.0.0-M2
|    |    |    \--- commons-io:commons-io:2.15.1
|    |    \--- commons-io:commons-io:2.15.1
|    +--- commons-io:commons-io:2.15.1
|    +--- org.apache.commons:commons-lang3:3.14.0
|    \--- org.apache.commons:commons-text:1.12.0
|         \--- org.apache.commons:commons-lang3:3.14.0
+--- com.jgeppert.struts2.jquery:struts2-jquery-tree-plugin:5.0.4
|    +--- com.jgeppert.struts2.jquery:struts2-jquery-plugin:5.0.4
|    |    +--- org.apache.struts:struts-annotations:1.0.8
|    |    |    \--- org.freemarker:freemarker:2.3.31 -> 2.3.33
|    |    +--- org.apache.struts:struts2-core:6.4.0 -> 7.0.0-M8 (*)
|    |    \--- org.apache.struts:struts2-velocity-plugin:6.4.0 -> 7.0.0-M8
|    |         +--- org.apache.velocity:velocity-engine-core:2.3
|    |         |    +--- org.apache.commons:commons-lang3:3.11 -> 3.14.0
|    |         |    \--- org.slf4j:slf4j-api:1.7.30 -> 2.0.13
|    |         +--- org.apache.struts:struts2-velocity-tools-view-jakarta:7.0.0-M8
|    |         \--- org.apache.struts:struts2-velocity-tools-jsp-jakarta:7.0.0-M8
|    |              \--- org.apache.velocity.tools:velocity-tools-generic:3.1
|    |                   +--- org.apache.velocity:velocity-engine-core:2.3 (*)
|    |                   +--- commons-beanutils:commons-beanutils:1.9.4
|    |                   |    \--- commons-collections:commons-collections:3.2.2
|    |                   +--- org.apache.commons:commons-digester3:3.2
|    |                   |    \--- commons-beanutils:commons-beanutils:1.8.3 -> 1.9.4 (*)
|    |                   +--- org.apache.commons:commons-lang3:3.10 -> 3.14.0
|    |                   +--- org.slf4j:slf4j-api:1.7.30 -> 2.0.13
|    |                   \--- com.github.cliftonlabs:json-simple:3.0.2
|    +--- org.apache.struts:struts-annotations:1.0.8 (*)
|    +--- org.apache.struts:struts2-core:6.4.0 -> 7.0.0-M8 (*)
|    +--- org.apache.struts:struts2-velocity-plugin:6.4.0 -> 7.0.0-M8 (*)
|    \--- commons-beanutils:commons-beanutils:1.9.4 (*)
+--- org.apache.struts:struts2-json-plugin:7.0.0-M8
+--- org.apache.struts:struts2-spring-plugin:7.0.0-M8
|    +--- org.springframework:spring-beans:6.0.13 -> 6.1.10 (*)
|    +--- org.springframework:spring-core:6.0.13 -> 6.1.11 (*)
|    +--- org.springframework:spring-context:6.0.13 -> 6.1.10 (*)
|    \--- org.springframework:spring-web:6.0.13 -> 6.1.10 (*)
+--- org.apache.struts:struts2-config-browser-plugin:7.0.0-M8
|    \--- org.apache.struts:struts2-velocity-plugin:7.0.0-M8 (*)
+--- commons-net:commons-net:3.11.1
+--- org.apache.commons:commons-lang3:3.14.0
+--- org.apache.commons:commons-text:1.12.0 (*)
+--- com.google.code.gson:gson:2.11.0
|    \--- com.google.errorprone:error_prone_annotations:2.27.0
+--- org.bouncycastle:bcprov-jdk18on:1.78.1
+--- com.thoughtworks.xstream:xstream:1.4.20
|    \--- io.github.x-stream:mxparser:1.2.2
|         \--- xmlpull:xmlpull:1.1.3.1
+--- org.springframework.boot:spring-boot-starter-websocket:3.3.1
|    +--- org.springframework.boot:spring-boot-starter-web:3.3.1 (*)
|    +--- org.springframework:spring-messaging:6.1.10 -> 6.1.11
|    |    +--- org.springframework:spring-beans:6.1.11 -> 6.1.10 (*)
|    |    \--- org.springframework:spring-core:6.1.11 (*)
|    \--- org.springframework:spring-websocket:6.1.10 -> 6.1.11
|         +--- org.springframework:spring-context:6.1.11 -> 6.1.10 (*)
|         +--- org.springframework:spring-core:6.1.11 (*)
|         \--- org.springframework:spring-web:6.1.11 -> 6.1.10 (*)
+--- org.springframework:spring-websocket:6.1.11 (*)
+--- org.springframework:spring-messaging:6.1.11 (*)
\--- org.projectlombok:lombok:1.18.30

Here the Stacktrace:

    com.opensymphony.xwork2.config.ConfigurationException: Caught Exception while registering Interceptor class org.apache.struts2.interceptor.debugging.DebuggingInterceptor
            at com.opensymphony.xwork2.factory.DefaultInterceptorFactory.buildInterceptor(DefaultInterceptorFactory.java:97) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.ObjectFactory.buildInterceptor(ObjectFactory.java:210) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.config.providers.InterceptorBuilder.constructInterceptorReference(InterceptorBuilder.java:73) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.config.providers.XmlDocConfigurationProvider.lookupInterceptorReference(XmlDocConfigurationProvider.java:1005) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at 
            
            ..........
            
              com.opensymphony.xwork2.factory.DefaultInterceptorFactory.buildInterceptor(DefaultInterceptorFactory.java:65) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            ... 68 common frames omitted
    Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
            at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:161) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.Scope$2$1.create(Scope.java:53) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl$ParameterInjector.inject(ContainerImpl.java:461) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.getParameters(ContainerImpl.java:475) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.inject(ContainerImpl.java:302) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            ... 78 common frames omitted
    Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
            at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:492) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.lambda$inject$3(ContainerImpl.java:526) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:567) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:526) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.config.impl.LocatableFactory.create(LocatableFactory.java:50) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:159) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            ... 82 common frames omitted
    Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
            at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.inject(ContainerImpl.java:304) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector.construct(ContainerImpl.java:435) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:490) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            ... 87 common frames omitted
    Caused by: java.lang.reflect.InvocationTargetException: null
            at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118) ~[na:na]
            at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
            at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.inject(ContainerImpl.java:302) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            ... 89 common frames omitted
    Caused by: java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
            at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
            at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3601) ~[na:na]
            at java.base/java.lang.Class.getDeclaredMethods(Class.java:2686) ~[na:na]
            at com.opensymphony.xwork2.inject.ContainerImpl.addInjectors(ContainerImpl.java:101) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:82) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:78) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:155) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na]
            at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:79) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:123) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector.<init>(ContainerImpl.java:357) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl$2.create(ContainerImpl.java:312) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl$2.create(ContainerImpl.java:309) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:155) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na]
            at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:79) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:123) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.getConstructor(ContainerImpl.java:580) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:489) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.lambda$inject$3(ContainerImpl.java:526) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:567) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:526) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.config.impl.LocatableFactory.create(LocatableFactory.java:50) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:159) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.Scope$2$1.create(Scope.java:53) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:503) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.lambda$getInstance$4(ContainerImpl.java:531) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:567) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:531) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at org.apache.struts2.views.freemarker.FreemarkerManager.setContainer(FreemarkerManager.java:235) ~[struts2-core-7.0.0-M8.jar:7.0.0-M8]
            at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
            ... 91 common frames omitted
    Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest
            at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
            at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
            at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]
            ... 122 common frames omitted

gradle file:

buildscript {
    repositories {
        mavenCentral()
        google()
        gradlePluginPortal()
    }
    dependencies {
    }
}


plugins {
    id 'java'
    id 'war'
    id 'org.springframework.boot' version "${springBootVersion}"
    id 'io.spring.dependency-management' version '1.1.6'
    id 'com.github.andygoossens.modernizer' version "${modernizerPluginVersion}"
    id 'io.freefair.lombok' version "8.6"
}

repositories {
    mavenCentral()
    maven {
        url "https://repository.apache.org/content/groups/staging/"
    }
}

configurations.all {
    resolutionStrategy {
        force 'org.ow2.asm:asm:9.7'
    }
    exclude group:"commons-logging", module:"commons-logging"
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(22)
    }
}

if (project.hasProperty("prod") || project.hasProperty("gae")) {
    apply from: "gradle/profile_prod.gradle"
} else {
    apply from: "gradle/profile_dev.gradle"
}

group = "de.tas.cofusim.app"
version = "5.3.1-SNAPSHOT"
//version = "5.3.0-RC"
//version = "5.3.0"

dependencies {
    implementation 'org.ow2.asm:asm:9.7'

    compileOnly 'jakarta.servlet:jakarta.servlet-api:6.1.0'
    implementation 'jakarta.el:jakarta.el-api:6.0.0'
    implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.2'
    implementation 'jakarta.annotation:jakarta.annotation-api:3.0.0'
    implementation 'org.glassfish.jaxb:jaxb-runtime:4.0.5'
    implementation 'jakarta.activation:jakarta.activation-api:2.1.3'

    // Spring Boot & Framework
    compileOnly "org.springframework.boot:spring-boot-dependencies:${springBootVersion}"
    implementation "org.springframework:spring-core:${springFrameWork}"
    annotationProcessor "org.springframework.boot:spring-boot-configuration-processor:${springBootVersion}"
    implementation "org.springframework.boot:spring-boot-starter-web:${springBootVersion}"
    implementation "org.springframework.boot:spring-boot-starter-tomcat:${springBootVersion}"

    // JSP  and jasper for embedded tomcat
    implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl:3.0.1'
    implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:3.0.0'
    implementation 'org.apache.tomcat.embed:tomcat-embed-jasper:10.1.25'

    implementation 'org.apache.logging.log4j:log4j-api:2.23.0'
    implementation 'org.apache.logging.log4j:log4j-core:2.23.1'

    // Apache Struts
    implementation "org.apache.struts:struts2-core:${strutsVersion}"
    implementation 'com.jgeppert.struts2.jquery:struts2-jquery-tree-plugin:5.0.4'
    implementation "org.apache.struts:struts2-json-plugin:${strutsVersion}"
    implementation "org.apache.struts:struts2-spring-plugin:${strutsVersion}"
    implementation "org.apache.struts:struts2-config-browser-plugin:${strutsVersion}"
    testImplementation "org.apache.struts:struts2-junit-plugin:${strutsVersion}"

    implementation 'commons-net:commons-net:3.11.1'
    implementation 'org.apache.commons:commons-lang3:3.14.0'
    implementation 'org.apache.commons:commons-text:1.12.0'

    implementation 'com.google.code.gson:gson:2.11.0'

    implementation 'org.bouncycastle:bcprov-jdk18on:1.78.1'

    implementation 'com.thoughtworks.xstream:xstream:1.4.20'

    testImplementation "org.springframework.boot:spring-boot-starter-test:${springBootVersion}"
    testImplementation "org.springframework.boot:spring-boot-test:${springBootVersion}"
    testImplementation 'org.mockito:mockito-inline:5.2.0'

    implementation "org.springframework.boot:spring-boot-starter-websocket:${springBootVersion}"
    implementation "org.springframework:spring-websocket:${springFrameWork}"
    implementation "org.springframework:spring-messaging:${springFrameWork}"
}

springBoot {
    mainClass = "de.tas.cofusim.webapp.CoFuSimApp"
}

defaultTasks "bootRun"

bootRun
{
    enableAssertions = true
}

compileJava.options.encoding = "UTF-8"

compileTestJava {
    options.encoding = "UTF-8"
    options.compilerArgs.add("-Xlint:deprecation")
}

test {

    useJUnitPlatform()
    exclude "**/*IT*", "**/*IntTest*"
    testLogging {
        events 'FAILED', 'SKIPPED'
    }

    reports.html.required = true
}

gradle.properties:

springBootVersion=3.3.1
springFrameWork=6.1.11
strutsVersion=7.0.0-M8

modernizerPluginVersion=1.9.2
profile=dev

Solution

  • You have dependency on struts2-jquery-tree-plugin.

        implementation 'com.jgeppert.struts2.jquery:struts2-jquery-tree-plugin:5.0.4'
    
    

    It is still not compatible with Struts 7. See the issue Support of Struts 7 #470.