How to resolve nested exception is java.lang.NoClassDefFoundError: org/eclipse/jetty/server/session/SessionDataStore?
How to resolve nested exception is java.lang.NoClassDefFoundError: org/eclipse/jetty/server/session/SessionDataStore?
我正在迁移一个旧的多模块项目。我无法迁移,因为它有很多依赖项,所以我只进行一次迁移,希望它会更容易。
我将 Spring-boot 升级到版本 2.4.3 并不断收到这些错误:
Caused by: org.springframework.context.ApplicationContextException:
Unable to start web server; nested exception is
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'JettyServletWebServerFactory' defined in
class path resource
[org/springframework/boot/autoconfigure/web/servlet/ServletWebServerFactoryConfiguration$EmbeddedJetty.class]:
Bean instantiation via factory method failed; nested exception is
org.springframework.beans.BeanInstantiationException: Failed to
instantiate
[org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory]:
Factory method 'JettyServletWebServerFactory' threw exception; nested
exception is java.lang.NoClassDefFoundError:
org/eclipse/jetty/server/session/SessionDataStore at
org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162)
我的jetty版本是9.2.28.v20190418.
我正在努力解决这个问题,但没有取得任何进展。
我该如何解决?
更新:
我尝试将 Spring Boot 降级到 2.3。3.RELEASE,我尝试将所有码头组件升级到 11.0.1,没有区别。它变得不太清楚,更多边际错误消息。
更新 2:
当我启动 Spring 引导应用程序本身时,我收到一条消息:
描述:
试图调用不存在的方法。尝试是从以下位置进行的:
org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory.configureSession(JettyServletWebServerFactory.java:242)
不存在以下方法:
'void org.eclipse.jetty.server.session.SessionHandler.setMaxInactiveInterval(int)'
方法的 class、org.eclipse.jetty.server.session.SessionHandler 可从以下位置获得:
jar:file:/Users/dmytro/.m2/repository/org/eclipse/jetty/jetty-server/9.2.28.v20190418/jetty-server-9.2.28.v20190418.jar!/org/eclipse/jetty/server/session/SessionHandler.class
我仍然不明白如何解决它,因为我之前没有太多地使用 Jetty
,但它看起来像一些东西。
更新 3:
经过无休止的调试,我发现冲突出现在wiremock:2.27.2
和spring-boot:2.4.3
之间。它们都依赖于 jetty
、jetty:9.2.28.v20190418
和 jetty:9.4.38.v20210224
.
的不兼容版本
问题是我无法取下线模。我无法降级 Spring Boot,因为 wiremock 滞后。我还有什么其他选择?
更新 4:
我发布了一个 issue on GitHub。我希望不需要修补 wiremock 或重写测试代码库。
Spring Boot 2.4.3 基于 Jetty 9.4.38.v20210224。 NoClassDefFoundException
中报告的 class SessionDataStore
不存在于您正在使用的 Jetty 版本中。
因此,解决方案可能是升级到 Jetty 9.4.38.v20210224。
关于 Jetty Github 问题,我得到的答案解决了我使用 jetty-bom
的问题,因此 jetty
可以自行解决:
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-bom</artifactId>
<type>pom</type>
</dependency>
它对我来说工作得天衣无缝。
更新:
在我 mvn clean install
之前,它一直在无缝工作,所以另一个对我来说绝对必要的依赖:
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock-jre8</artifactId>
<version>2.27.2</version>
<type>pom</type>
</dependency>
我正在迁移一个旧的多模块项目。我无法迁移,因为它有很多依赖项,所以我只进行一次迁移,希望它会更容易。
我将 Spring-boot 升级到版本 2.4.3 并不断收到这些错误:
Caused by: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'JettyServletWebServerFactory' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/ServletWebServerFactoryConfiguration$EmbeddedJetty.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory]: Factory method 'JettyServletWebServerFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/eclipse/jetty/server/session/SessionDataStore at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162)
我的jetty版本是9.2.28.v20190418.
我正在努力解决这个问题,但没有取得任何进展。
我该如何解决?
更新:
我尝试将 Spring Boot 降级到 2.3。3.RELEASE,我尝试将所有码头组件升级到 11.0.1,没有区别。它变得不太清楚,更多边际错误消息。
更新 2:
当我启动 Spring 引导应用程序本身时,我收到一条消息:
描述:
试图调用不存在的方法。尝试是从以下位置进行的:
org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory.configureSession(JettyServletWebServerFactory.java:242)
不存在以下方法:
'void org.eclipse.jetty.server.session.SessionHandler.setMaxInactiveInterval(int)'
方法的 class、org.eclipse.jetty.server.session.SessionHandler 可从以下位置获得:
jar:file:/Users/dmytro/.m2/repository/org/eclipse/jetty/jetty-server/9.2.28.v20190418/jetty-server-9.2.28.v20190418.jar!/org/eclipse/jetty/server/session/SessionHandler.class
我仍然不明白如何解决它,因为我之前没有太多地使用 Jetty
,但它看起来像一些东西。
更新 3:
经过无休止的调试,我发现冲突出现在wiremock:2.27.2
和spring-boot:2.4.3
之间。它们都依赖于 jetty
、jetty:9.2.28.v20190418
和 jetty:9.4.38.v20210224
.
问题是我无法取下线模。我无法降级 Spring Boot,因为 wiremock 滞后。我还有什么其他选择?
更新 4: 我发布了一个 issue on GitHub。我希望不需要修补 wiremock 或重写测试代码库。
Spring Boot 2.4.3 基于 Jetty 9.4.38.v20210224。 NoClassDefFoundException
中报告的 class SessionDataStore
不存在于您正在使用的 Jetty 版本中。
因此,解决方案可能是升级到 Jetty 9.4.38.v20210224。
关于 Jetty Github 问题,我得到的答案解决了我使用 jetty-bom
的问题,因此 jetty
可以自行解决:
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-bom</artifactId>
<type>pom</type>
</dependency>
它对我来说工作得天衣无缝。
更新:
在我 mvn clean install
之前,它一直在无缝工作,所以另一个对我来说绝对必要的依赖:
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock-jre8</artifactId>
<version>2.27.2</version>
<type>pom</type>
</dependency>