如何解决嵌套异常是java.lang.NoClassDefFoundError:org/eclipse/jetty/server/session/SessionDataStore?
我正在迁移一个旧的多模块项目。我不能迁移,因为它有很多依赖项,所以我只进行一次迁移,希望它会更容易 我将Spring boot升级到2.4.3版,并不断出现以下错误: 原因:org.springframework.context.ApplicationContextException: 无法启动web服务器;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 正在创建中定义了名为“JettyServletWebServerFactory”的bean 类路径资源 [org/springframework/boot/autoconfigure/web/servlet/ServletWebServerFactoryConfiguration$EmbeddedJetty.class]: 通过工厂方法实例化Bean失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:未能 实例化 [org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory]: 工厂方法“JettyServletWebServerFactory”引发异常;嵌套 异常为java.lang.NoClassDefFoundError: org/eclipse/jetty/server/session/SessionDataStore位于 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162) 我的jetty版本是9.2.28.v20190418 我正在绞尽脑汁试图解决这个问题,但没有取得任何进展 我如何解决它 更新: 我尝试将Spring Boot降级到2.3.3.RELEASE,我尝试将所有jetty组件升级到11.0.1,没有区别。它会得到不太清晰、更边缘化的错误消息 更新2: 当我启动Spring boot应用程序时,我收到一条消息: 说明: 试图调用不存在的方法。从以下位置进行了尝试:如何解决嵌套异常是java.lang.NoClassDefFoundError:org/eclipse/jetty/server/session/SessionDataStore?,java,spring,spring-boot,jetty,wiremock,Java,Spring,Spring Boot,Jetty,Wiremock,我正在迁移一个旧的多模块项目。我不能迁移,因为它有很多依赖项,所以我只进行一次迁移,希望它会更容易 我将Spring boot升级到2.4.3版,并不断出现以下错误: 原因:org.springframework.context.ApplicationContextException: 无法启动web服务器;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 正在创建中定义了名为“JettyServletWebServ
org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory.configureSession(JettyServletWebServerFactory.java:242)
以下方法不存在:
'void org.eclipse.jetty.server.session.SessionHandler.setMaxInactiveInterval(int)'
该方法的类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
问题是我无法移除wiremock。我不能降低弹簧靴的等级,因为wiremock落后了。我还有别的选择吗
更新4:
我发了一封信。我希望没有必要修补wiremock或重写测试代码库。Spring Boot 2.4.3基于Jetty 9.4.38.v20210224。您正在使用的Jetty版本中不存在
NoClassDefFoundException
中报告的类SessionDataStore
因此,解决方案可能是升级到Jetty 9.4.38.v20210224。关于Jetty Github问题,我得到了一个答案,解决了我的问题,使用了
Jetty bom
,因此Jetty
可以自行处理:
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-bom</artifactId>
<type>pom</type>
</dependency>
我是否需要排除特定的jetty库?它们有一组东西,比如servlet、核心、服务器、客户端等等。我认为,您应该从
org.springframework.boot:spring-boot-dependencies:2.4.3导入依赖项管理,或者尝试使用项目中定义的相同版本。所以,我不认为你必须排除一些东西。我更新了我的帖子。由于Wiremock和不兼容的jetty版本,看起来一切都变得一团糟。你还有别的想法吗?
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock-jre8</artifactId>
<version>2.27.2</version>
<type>pom</type>
</dependency>