ITPub博客

首页 > 数据库 > 数据库开发技术 > 【SpringBoot】解决依赖版本不一致报错问题

【SpringBoot】解决依赖版本不一致报错问题

原创 数据库开发技术 作者:阿Q说代码 时间:2023-06-16 16:41:29 0 删除 编辑

哈喽大家好,我是阿Q。

今天在开发代码的过程中,由于手抖,不知道引入了什么包依赖,导致项目启动一直报错,特写本文来记录下解决问题的经过。

问题描述

报错信息如下


Description:



An attempt was made to call a method that does not exist. The attempt was made from the following location:



    io.undertow.websockets.jsr.Bootstrap.handleDeployment(Bootstrap.java:84)



The following method did not exist:



    javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;



The method's class, javax.servlet.ServletContext, is available from the following locations:



    jar:file:/E:/.m2/repository/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar!/javax/servlet/ServletContext.class

    jar:file:/E:/.m2/repository/jakarta/servlet/jakarta.servlet-api/4.0.4/jakarta.servlet-api-4.0.4.jar!/javax/servlet/ServletContext.class



The class hierarchy was loaded from the following locations:



    javax.servlet.ServletContext: file:/E:/.m2/repository/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar





Action:



Correct the classpath of your application so that it contains a single, compatible version of javax.servlet.ServletContext

报错描述

试图从以下位置去调用一个不存在的方法:io.undertow.websockets.jsr.Bootstrap.handleDeployment(Bootstrap.java:84);

javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;该方法不存在;

该方法的类javax.servlet.ServletContext可从以下位置获得:


 jar:file:/E:/.m2/repository/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar!/javax/servlet/ServletContext.class

 jar:file:/E:/.m2/repository/jakarta/servlet/jakarta.servlet-api/4.0.4/jakarta.servlet-api-4.0.4.jar!/javax/servlet/ServletContext.class

类层次结构是从以下位置加载的:javax.servlet.ServletContext: file:/E:/.m2/repository/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar

更正应用程序的类路径,使其包含一个单独的兼容版本的javax.servlet.ServletContext。

上边的解释说人话就是servlet-api和jakarta.servlet-api下的 ServletContext.class 冲突了,需要修改一下版本依赖。

解决方法

首先打开IDEA的 setting 设置

然后选择 Plugins 插件,下载Maven Helper插件,如果安装之后不生效,可以重启一下 IDEA

最后打开 pom.xml 文件,选择 Dependency Analyzer 切换页,选择 All Dependencies as Tree 选项,然后搜索 javax,然后右键选择 Exclude 排除重复依赖就可以了。

点完之后会发现 pom.xml 文件中会出现如下代码


<dependency>

  <groupId>com.xxx.kas.swagger</groupId>

  <artifactId>swagger-spring-mvc-core</artifactId>

  <version>1.0-SNAPSHOT</version>

  <exclusions>

 <exclusion>

   <artifactId>servlet-api</artifactId>

   <groupId>javax.servlet</groupId>

 </exclusion>

  </exclusions>

</dependency>

如果排除之后依然报错,可以选择上图的Jump To Source跳转到对应的仓库内将对应版本删除即可。

刷新下依赖,发现正常启动了,搞定。

总结

以后再遇到这种包依赖冲突的问题都可以使用Maven Helper这个插件来轻松解决,妈妈再也不用担心我的学习了😃。

本文到这里就结束了,看看我为了写这篇文章又日渐稀少的头发,我忍不住哭出声来。可能只有给我点赞,才能平复我的心情吧。

好看的皮囊千篇一律,有趣的灵魂万里挑一,让我们在冷漠的城市里相互温暖,我是阿Q,我们下期再见!


原文作者:阿Q说代码;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-01-02

  • 博文量
    95
  • 访问量
    40823