servlet依赖冲突引起的报错:An attempt was made to call a method that does not exist.

最近在学习微服务的时候启动eureka的时候发生报错导致启动失败,具体报错如下:

2023-10-31 18:54:04.193 ERROR 12616 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

*************************** APPLICATION FAILED TO START *************************** Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: org.apache.catalina.authenticator.AuthenticatorBase.startInternal(AuthenticatorBase.java:1355) The following method did not exist: 'java.lang.String javax.servlet.ServletContext.getVirtualServerName()' The method's class, javax.servlet.ServletContext, is available from the following locations: jar:file:/C:/Users/86138/.m2/repository/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar!/javax/servlet/ServletContext.class jar:file:/C:/Users/86138/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/javax/servlet/ServletContext.class The class hierarchy was loaded from the following locations: javax.servlet.ServletContext: file:/C:/Users/86138/.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

【1】报错原因简单说就是不同依赖之间的servlet版本不同。

程序尝试调用了一个不存在的方法。具体来说,出现了对 javax.servlet.ServletContext.getVirtualServerName() 方法的调用,而该方法实际上并不存在。

错误提示中还给出了相关的类加载信息,显示了 javax.servlet.ServletContext 类在两个地方可用,分别是 servlet-api-2.5.jartomcat-embed-core-9.0.41.jar 这两个 JAR 包中。由于存在多个不兼容的版本,导致了调用失败。

要解决这个问题,你需要确保应用程序的类路径中只包含一个兼容的版本的 javax.servlet.ServletContext 类。

【2】我在网上看到一个这样的解决方案:https://blog.csdn.net/weixin_40796433/article/details/111881916

这样并不是不可以,但是如果项目重新加载的话仍然还需要进行调整。

【3】更好的方法是保证项目只包含一个特定的 JAR 包

可以在 pom.xml 文件中声明依赖,并排除掉不需要的传递性依赖。

<dependency>
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId>
    <version>2.5</version> 
    <scope>provided</scope> 
</dependency>

在解决"An attempt was made to call a method that does not exist"这个错误时,根据提供的引用内容,可以尝试以下几种方法: 1. 删除提示的jar包:根据引用,可以尝试删除相关的jar包。这样做可能会解决该错误。 2. 在当前项目的库中删除提示的jar包:根据引用,可以在当前项目的库中删除提示的jar包,这样只会调用指定路径下的jar包。再次尝试启动项目时,可能会正常运行。 3. 在项目依赖中移除对应版本的jar包:根据引用,可以在项目依赖中移除对应版本的jar包,然后重新运行项目。这一步也可以直接移除对应版本的jar包,从而解决该错误。 你可以根据具体的情况选择其中一种或多种方法来解决这个错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [An attempt was made to call a method that does not exist. The attempt was made from the following](https://blog.csdn.net/qq_50954361/article/details/127945517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [解决An attempt was made to call a method that does not exit问题](https://blog.csdn.net/Egolalal/article/details/121350898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值