微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决嵌套异常是 java.lang.NoClassDefFoundError: org/eclipse/jetty/server/session/SessionDataStore?

如何解决如何解决嵌套异常是 java.lang.NoClassDefFoundError: org/eclipse/jetty/server/session/SessionDataStore?

我正在迁移一个旧的多模块项目。我无法迁移,因为它有很多依赖项,所以我进行了一次迁移,希望它会更容易。

我将 Spring-boot 升级到了 2.4.3 版本并不断收到这些错误

引起:org.springframework.context.ApplicationContextException: 无法启动网络服务器;嵌套异常是 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)

我的码头版本是9.2.28.v20190418。

我正在努力解决这个问题,但没有取得任何进展。

我该如何解决

更新:

我尝试将 Spring Boot 降级到 2.3.3.RELEASE,我尝试将所有 jetty 组件升级到 11.0.1,没有区别。它变得不太清楚,更边缘的错误消息。

更新 2:

当我启动 Spring boot 应用程序本身时,我收到一条消息:

说明:

尝试调用不存在的方法。尝试是从以下位置进行的:

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.2spring-boot:2.4.3 之间。它们都依赖于不兼容的 jettyjetty:9.2.28.v20190418jetty:9.4.38.v20210224 版本。

问题是我无法移除线材。我无法降级 Spring Boot,因为wiremock 滞后。我还有什么其他选择?

更新 4: 我发布了一个 issue on GitHub。我希望不需要修补wiremock或重写测试代码库。

解决方法

在 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 基于 Jetty 9.4.38.v20210224。 SessionDataStore 中报告的类 NoClassDefFoundException 在您使用的 Jetty 版本中不存在。

因此,解决方案可能是升级到 Jetty 9.4.38.v20210224。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。