【问题标题】:Spring Boot start up failed : NoSuchMethodError: javax.servlet.ServletContext NoSuchMethodErrorSpring Boot 启动失败:NoSuchMethodError: javax.servlet.ServletContext NoSuchMethodError
【发布时间】:2018-12-18 19:30:17
【问题描述】:

尝试在我的本地框中启动应用程序时出现以下错误。 知道如何在错误下方解决此问题

java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [NonLoginAuthenticator[StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)

PFB, pom.xml 具有完整的父 2.1.1.Release 和依赖管理作为 Brixton.SR5 版本详细信息

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.1.Release</version>
            <relativePath /> <!-- lookup parent from repository -->
        </parent>
    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.9</java.version>
            <springfox.version>2.6.0</springfox.version>
        </properties>
<dependencies>
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
</dependencies>
    <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Finchley.SR2</version>
                    <!-- <version>Brixton.SR5</version> -->
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                        </dependencies>
        </dependencyManagement>

追踪:

java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [NonLoginAuthenticator[StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:951)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:831)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1432)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1422)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:944)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:261)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:801)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.startup.Tomcat.start(Tomcat.java:372)
    at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:106)
    at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(TomcatWebServer.java:86)
    at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:414)
    at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:174)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:181)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:154)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:540)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
    at com.nbcuni.compass.title.TitleServiceApplication.main(TitleServiceApplication.java:34)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [NonLoginAuthenticator[StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]]
    at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:441)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
    at org.apache.catalina.core.StandardPipeline.startInternal(StandardPipeline.java:179)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5019)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1432)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1422)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:944)
    ... 29 common frames omitted
Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
    at org.apache.catalina.authenticator.AuthenticatorBase.startInternal(AuthenticatorBase.java:117

【问题讨论】:

  • @ngueno:跟踪更新
  • Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String; 你有冲突的库。
  • @Thiru 这与我提到的另一个问题中描述的错误相同,请检查
  • 相关重复但不是重复。我重新打开。

标签: java spring spring-boot


【解决方案1】:

您同时声明了spring-boot-starter-jerseyspring-boot-starter-web
这是作为首发的替代品。

mvn dependency:tree 显示冲突:

[信息] +- org.springframework.boot:spring-boot-starter-web:jar:2.0.0.RELEASE:compile [信息] | +- org.springframework.boot:spring-boot-starter-json:jar:2.0.0.RELEASE:compile [信息] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.4:compile [信息] | | \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.9.4:compile [信息] | +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.0.0.RELEASE:compile [信息] | | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.28:compile [信息] | | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.28:compile [信息] | | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.28:compile [信息] | +- org.hibernate.validator:hibernate-validator:jar:6.0.7.Final:compile [信息] | | \- javax.validation:validation-api:jar:2.0.1.Final:compile [信息] | +- org.springframework:spring-web:jar:5.0.4.RELEASE:compile [信息] | \- org.springframework:spring-webmvc:jar:5.0.4.RELEASE:compile

还有:

[信息] +- org.springframework.boot:spring-boot-starter-jersey:jar:2.0.0.RELEASE:compile [信息] | +- org.springframework.boot:spring-boot-starter-validation:jar:2.0.0.RELEASE:compile [信息] | +- org.glassfish.jersey.core:jersey-server:jar:2.26:compile [信息] | | +- org.glassfish.jersey.core:jersey-common:jar:2.26:compile [信息] | | | \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile [信息] | | +- org.glassfish.jersey.core:jersey-client:jar:2.26:compile [信息] | | +- javax.ws.rs:javax.ws.rs-api:jar:2.1:compile [信息] | | \- org.glassfish.jersey.media:jersey-media-jaxb:jar:2.26:compile [信息] | +- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.26:compile [信息] | +- org.glassfish.jersey.containers:jersey-container-servlet:jar:2.26:compile

在您的情况下,org.apache.tomcat.embed:tomcat-embed-coreorg.glassfish.jersey.containers:jersey-container-servlet-core 包含它们自己的 servlet API(重新打包)。
除此之外,您可能还会遇到此类配置的其他问题。

所以你应该做一个选择:使用 Spring Web 或 Jersey 作为启动器。
如果出于某些特定原因您需要同时支持 Spring Web 和 Jersey,您可能不应该使用 starters,而是确定它们之间的一些兼容依赖项。

【讨论】:

    【解决方案2】:

    当我采用你的 pom.xml 并遵循 Spring Boot Jersey 教程 (http://zetcode.com/springboot/jersey/) 时,我可以让 http://localhost:8080/hello 工作。

    我的pom.xml如下:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    

    您可能需要继续进一步检查 spring-cloud-dependencies 是否有影响。

    【讨论】:

      猜你喜欢
      • 2017-05-27
      • 2022-12-17
      • 2018-04-01
      • 2015-03-28
      • 2017-07-02
      • 2018-10-22
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      相关资源
      最近更新 更多