Erii Asari
Erii Asari

Reputation: 335

NoClassDefFoundError jakarta/servlet/http/HttpSessionContext after upgrade to spring boot 3

In my gradle base project I'm trying upgrade spring dependency from 2.7.6 to 3.0.1,

However I face issue NoClassDefFoundError: jakarta/servlet/http/HttpSessionContext

Caused by: java.lang.NoClassDefFoundError: jakarta/servlet/http/HttpSessionContext
    at org.eclipse.jetty.servlet.ServletContextHandler.newSessionHandler(ServletContextHandler.java:339)
    at org.eclipse.jetty.servlet.ServletContextHandler.getSessionHandler(ServletContextHandler.java:432)
    at org.eclipse.jetty.servlet.ServletContextHandler.relinkHandlers(ServletContextHandler.java:257)
    at org.eclipse.jetty.servlet.ServletContextHandler.<init>(ServletContextHandler.java:180)
    at org.eclipse.jetty.webapp.WebAppContext.<init>(WebAppContext.java:301)
    at org.eclipse.jetty.webapp.WebAppContext.<init>(WebAppContext.java:228)
    at org.springframework.boot.web.embedded.jetty.JettyEmbeddedWebAppContext.<init>(JettyEmbeddedWebAppContext.java:28)
    at org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory.getWebServer(JettyServletWebServerFactory.java:158)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:183)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161)
    ... 9 common frames omitted
Caused by: java.lang.ClassNotFoundException: jakarta.servlet.http.HttpSessionContext
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    ... 19 common frames omitted

As I understand spring boot 3.0 use Servlet Api 6.0 which is not supported by Jetty and it requires downgrade Servlet API to 5.0.0 (https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide#jetty)

Upvotes: 5

Views: 8020

Answers (2)

Tasos Zervos
Tasos Zervos

Reputation: 686

I've had the same issue, and the previously suggested option was not working for everything. Either the service would start or all the tests (inc mockmvc) would succeed. But not everything. Setting 5.0.0 or 6.0.0 would only make one part to work... :-(

In the end, this setup has worked for all:

    ext {
        set("jakarta-servlet.version", '5.0.0')
    }

plus:

    testImplementation 
            'org.eclipse.jetty:jetty-server:11.0.14',
            'jakarta.servlet:jakarta.servlet-api:6.0.0',

Upvotes: 0

Erii Asari
Erii Asari

Reputation: 335

To solve this issue, you need to add to your gradle.build script ext['jakarta-servlet.version'] = '5.0.0'

Upvotes: 5

Related Questions