依赖重复报错
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:
javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;The method’s class, javax.servlet.ServletContext, is available from the following locations:
jar:file:/E:/Tool/maven/maven-repository/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar!/javax/servlet/ServletContext.class
jar:file:/E:/Tool/maven/maven-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:/E:/Tool/maven/maven-repository/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar
Action:
Correct the classpath of your application so that it contains a single, compatible version of javax.servlet.ServletContext
Process finished with exit code 1
分析:
编译时无报错,运行时报错。
从上面看是由于多个依赖 同时包含 ServletContext.class 所致。
包含该类的jar文件分别是 servlet-api-2.3.jar 和 tomcat-embed-core-9.0.29.jar
我们需要这里要排除 servlet-api-2.3.jar
解决:
1、打开项目依赖关系图
2、查找依赖
3、追溯项目依赖,直接点进去就可以
查找是哪些依赖引入了servlet-api-2.3.jar,通过点击箭头,往上追溯,一直到我们自己的依赖
4、排除依赖
<dependency>
<groupId>com.octo.captcha</groupId>
<artifactId>jcaptcha</artifactId>
<version>1.0</version>
<exclusions> //排除
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
5、再次编译后启动