java - 在运行 Spring MVC 应用程序时在 Spring Boot 中获取 NoSuchMethodError : javax. servlet.ServletContext.addServlet

标签 java spring-mvc spring-boot nosuchmethoderror lifecycleexception

当我尝试使用 Spring Boot 运行 Spring MVC 应用程序时遇到异常...

ContainerBase: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:188)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:799)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    ... 6 more
Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.addServlet(Ljava/lang/String;Ljavax/servlet/Servlet;)Ljavax/servlet/ServletRegistration$Dynamic;
    at org.springframework.boot.context.embedded.ServletRegistrationBean.onStartup(ServletRegistrationBean.java:166)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext$1.onStartup(EmbeddedWebApplicationContext.java:214)
    at org.springframework.boot.context.embedded.tomcat.ServletContextInitializerLifecycleListener.lifecycleEvent(ServletContextInitializerLifecycleListener.java:54)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5355)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 6 more

最佳答案

如果你想知道类是从哪里加载的,试试

java -verbose:class -jar foo.jar | grep javax.servlet.ServletContext

其中 foo.jar 是 Gradle 或 Maven 生成的胖 JAR。例如,ServletContext 类可能是从 JDK 扩展目录中较旧的 servlet-api JAR 中读取的,而不是您的 Maven 或 Gradle 依赖项。

命令的输出看起来像这样......

$ java -verbose:class -jar build/libs/foo-0.2.3.jar | grep javax.servlet.ServletContext
[Loaded javax.servlet.ServletContext from jar:file:.../build/libs/foo-0.2.3.jar!/lib/javax.servlet-api-3.1.0.jar!/]
[Loaded javax.servlet.ServletContextListener from jar:file:.../build/libs/foo-0.2.3.jar!/lib/javax.servlet-api-3.1.0.jar!/]
[Loaded javax.servlet.ServletContextAttributeListener from jar:file:.../build/libs/foo-0.2.3.jar!/lib/javax.servlet-api-3.1.0.jar!/]

关于java - 在运行 Spring MVC 应用程序时在 Spring Boot 中获取 NoSuchMethodError : javax. servlet.ServletContext.addServlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24080541/

相关文章:

java - 如何使用 java servlet 为现有网页提供服务

由于 Autowiring JavaMailSender,SpringBoot 应用程序启动失败 - 版本 2.0.0-snapshot

spring-boot - Spring Boot - 配置 Redis 键值存储/缓存

spring - 装饰 spring boot 仓库

java - 正则表达式: Capture Negation of Combination of Multiple Regular Expressions

java - 吉斯与 parent

同一类的 java Graphics2d 实例的行为不同

spring - 在 Spring Boot 的 Servlet 配置中添加过滤器

java - 这是选择要运行的 Controller 的 URL 映射的唯一方法吗?

spring-boot - cucumber +TestNG+Spring Boot