项目是springboot+jsp结构的,但是在发布生产环境的时候又需要用maven打成jar包,老是启动失败
以下是具体报错:
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:1321)
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:/ztsoft/usr/ectapp/qz_1.5.0/e-sync-1.4.0.jar!/BOOT-INF/lib/javax.servlet-api-3.0.1.jar!/javax/servlet/ServletContext.class
jar:file:/ztsoft/usr/ectapp/qz_1.5.0/e-sync-1.4.0.jar!/BOOT-INF/lib/tomcat-embed-core-9.0.33.jar!/javax/servlet/ServletContext.class
It was loaded from the following location:
jar:file:/ztsoft/usr/ectapp/qz_1.5.0/e-sync-1.4.0.jar!/BOOT-INF/lib/javax.servlet-api-3.0.1.jar!/
Action:
Correct the classpath of your application so that it contains a single, compatible version of javax.servlet.ServletContext
重点看这句话:
Correct the classpath of your application so that it contains a single, compatible version of javax.servlet.ServletContext
说白了就是jar之间冲突了,看你要用哪个
<!--<dependency>-->
<!--<groupId>javax.servlet</groupId>-->
<!--<artifactId>javax.servlet-api</artifactId>-->
<!--<version>${javax.servlet-api.version}</version>-->
<!--</dependency>-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>9.0.36</version>
</dependency>
<dependency>
注释掉上面哪个
至于原因:老婆还是自己的香对吧
servlet-api 是提供编写servlet时要用到
HttpServletRequest和HttpServletResponse 等对象的,但是tomcat里也有,运行时要用tomcat自己的
重新打包