Spring Boot 错误:java.lang.NoSuchMethodError:org.apache.tomcat.util.scan.StandardJarScanner.setJarScanFilter

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/29444650/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 08:00:00  来源:igfitidea点击:

Spring Boot Error: java.lang.NoSuchMethodError: org.apache.tomcat.util.scan.StandardJarScanner.setJarScanFilter

javaspringmaventomcatspring-boot

提问by Coder Shark

I am currently writing an API backend using Spring which I want to deploy on to a production server using Spring Boot.

我目前正在使用 Spring 编写 API 后端,我想使用 Spring Boot 将其部署到生产服务器上。

If I run the backend in Eclipse compiling to a war (specified in Maven), and using Tomcat 7, it runs without a problem.

如果我在 Eclipse 中运行后端编译为战争(在 Maven 中指定),并使用 Tomcat 7,它运行没有问题。

However as I want to deploy to the server I am using Spring Boot.

但是,当我想部署到服务器时,我使用的是 Spring Boot。

Application.java

应用程序.java

package com.ninjasquare.server;

import java.util.Arrays;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class Application {

     public static void main(String[] args) {
            ApplicationContext ctx = SpringApplication.run(Application.class, args);

            System.out.println("NinjaSquare server up and running with Spring Boot!");

            System.out.println("Let's inspect the beans provided by Spring Boot:");

            String[] beanNames = ctx.getBeanDefinitionNames();
            Arrays.sort(beanNames);
            for (String beanName : beanNames) {
                System.out.println(beanName);
            }

        }

}

pom.xml

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.ninjasquare</groupId>
    <artifactId>NinjaSquareServer</artifactId>
    <!-- Server Deployment Change Required: 1. Change war to jar -->
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>

    <!-- Spring Boot related config -->

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.3.RELEASE</version>
    </parent>

    <properties>
    <java-version>1.7</java-version>
    <!-- Note: By default Spring Boot uses Tomcat 8. We set this so we can use Tomcat 7. -->
    <!-- <tomcat.version>7.0.59</tomcat.version> -->
    <!-- <org.springframework-version>4.1.6.RELEASE</org.springframework-version> -->

    <org.springframework-version>3.1.1.RELEASE</org.springframework-version>
    <org.aspectj-version>1.6.10</org.aspectj-version>
    <org.slf4j-version>1.6.6</org.slf4j-version>
    <jersey.version>1.8</jersey.version>
    <org.springframework.data.version>2.2.0.RELEASE</org.springframework.data.version>
    <org.springframework.spring-test>2.5</org.springframework.spring-test>
    <log4j.version>1.2.15</log4j.version>
    <javax.inject.version>1</javax.inject.version>
    <javax.servlet.version>3.0.1</javax.servlet.version>
    <javax.servlet.jsp.version>2.1</javax.servlet.jsp.version>
    <javax.servlet.jstl.version>1.2</javax.servlet.jstl.version>

    <spring-social-facebook-version>1.1.1.RELEASE</spring-social-facebook-version>

    <junit.version>4.4</junit.version>
    <cglib.version>2.2.2</cglib.version>
    <org.hibernate.version>4.3.1.Final</org.hibernate.version>
    <com.github.jsimone.version>7.0.22.3</com.github.jsimone.version>
    <org.neo4j.app.version>1.8.2</org.neo4j.app.version>
    <spring-data-neo4j.version>2.0.1.RELEASE</spring-data-neo4j.version>
    <maven-eclipse-plugin.version>2.9</maven-eclipse-plugin.version>
    <org.apache.maven.plugins.version>2.5.1</org.apache.maven.plugins.version>
    <org.codehaus.mojo>1.2.1</org.codehaus.mojo>
    <org.apache.maven.plugins.maven-dependency-plugin>2.4</org.apache.maven.plugins.maven-dependency-plugin>
    <org.apache.maven.plugins.maven-surefire-plugin>2.6</org.apache.maven.plugins.maven-surefire-plugin>
</properties>

<dependencies>
    <!-- Server Deployment Change Required: 2. Include our custom JAR. For now, patch this code on the server manually.
    Note: This JAR needs to be installed with maven install:install-file on the server -->
    <!-- 
    <dependency>
        <groupId>com.ninjasquare.common</groupId>
        <artifactId>ninjasquarecommon</artifactId>
        <version>0.01</version>
    </dependency>
     -->

    <!--  Spring Boot dependency -->

    <!-- Import dependency management from Spring Boot -->
    <!-- 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>1.2.3.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    -->

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--  Was this code missing before? -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>el-api</artifactId>
        <version>2.2</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>el-impl</artifactId>
        <version>2.2</version>
    </dependency>

    <!-- Hymanson/Jersey deps -->
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>${jersey.version}</version>
    </dependency>

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>${jersey.version}</version>
    </dependency>

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>${jersey.version}</version>
    </dependency>

    <!-- SDN -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-neo4j</artifactId>
        <!-- <version>${org.springframework.data.version}</version> -->
    </dependency>

    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <!-- <version>${org.springframework.spring-test}</version> -->
    </dependency>

    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <!-- <version>${org.springframework-version}</version> -->
        <exclusions>
            <!-- Exclude Commons Logging in favor of SLF4j -->
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <!-- <version>${org.springframework-version}</version> -->
    </dependency>

    <!-- AspectJ -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <!-- <version>${org.aspectj-version}</version> -->
    </dependency>

    <!-- Logging -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <!-- <version>${log4j.version}</version> -->
        <exclusions>
            <exclusion>
                <groupId>javax.mail</groupId>
                <artifactId>mail</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.jms</groupId>
                <artifactId>jms</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.jdmk</groupId>
                <artifactId>jmxtools</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.jmx</groupId>
                <artifactId>jmxri</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- @Inject -->
    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>${javax.inject.version}</version>
    </dependency>

    <!-- Servlet -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <!-- <version>${javax.servlet.version}</version> -->
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>${javax.servlet.jsp.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <!-- <version>${javax.servlet.jstl.version}</version> -->
    </dependency>

    <!--  Import Spring Social libraries -->
    <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-facebook</artifactId>
        <!-- <version>${spring-social-facebook-version}</version> -->
    </dependency>

    <!-- additional libraries required by neo/spring... -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <!-- <version>${junit.version}</version> -->
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>${cglib.version}</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <!-- <version>${org.hibernate.version}</version> -->
    </dependency>


    <!-- execute immediately support... -->
    <dependency>
        <groupId>com.github.jsimone</groupId>
        <artifactId>webapp-runner</artifactId>
        <version>${com.github.jsimone.version}</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>com.sun.jersey.contribs</groupId>
        <artifactId>jersey-spring</artifactId>
        <version>${jersey.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.neo4j.app</groupId>
        <artifactId>neo4j-server</artifactId>
        <version>${org.neo4j.app.version}</version>
    </dependency>
    <dependency>
        <groupId>org.neo4j.app</groupId>
        <artifactId>neo4j-server</artifactId>
        <classifier>static-web</classifier>
        <version>${org.neo4j.app.version}</version>
    </dependency>

            <!--        
            <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-neo4j-rest</artifactId>
        <version>${spring-data-neo4j.version}</version>
    </dependency> -->

    <dependency>
        <groupId>org.simpleframework</groupId>
        <artifactId>simple-xml</artifactId>
        <version>2.7</version>
    </dependency>

</dependencies>
<build>
    <plugins>
        <!-- Plugin for Spring Boot Maven -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <artifactId>maven-eclipse-plugin</artifactId>
            <!-- <version>${maven-eclipse-plugin.version}</version> -->
            <configuration>
                <additionalProjectnatures>
                    <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                </additionalProjectnatures>
                <additionalBuildcommands>
                    <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                </additionalBuildcommands>
                <downloadSources>true</downloadSources>
                <downloadJavadocs>true</downloadJavadocs>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <!-- <version>${org.apache.maven.plugins.version}</version> -->
            <configuration>
                <source>${java-version}</source>
                <target>${java-version}</target>
                <compilerArgument>-Xlint:all</compilerArgument>
                <showWarnings>true</showWarnings>
                <showDeprecation>true</showDeprecation>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <!-- <version>${org.codehaus.mojo}</version> -->
            <configuration>
                <mainClass>org.test.int1.Main</mainClass>
            </configuration>
        </plugin>
        <!-- enable execution environment... -->
        <!-- <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>${org.apache.maven.plugins.maven-dependency-plugin}</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>com.github.jsimone</groupId>
                                <artifactId>webapp-runner</artifactId>
                                <version>${com.github.jsimone.version}</version>
                                <destFileName>webapp-runner.jar</destFileName>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin> -->

        <!-- get Spring, Maven & JUnit test working... -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <!-- <version>${org.apache.maven.plugins.maven-surefire-plugin}</version> -->
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-junit47</artifactId>
                    <version>${org.apache.maven.plugins.maven-surefire-plugin}</version>
                </dependency>
            </dependencies>
            <configuration>
                <includes>
                    <include>**/testcases/*.class</include>
                </includes>
            </configuration>
        </plugin>

    </plugins>
</build>
</project>

When I copy the whole project over to my linux server, and I run maven package, the code compiles without a problem. When I then run the generated jar file with java -jar [name of file]I get the following error:

当我将整个项目复制到我的 linux 服务器并运行maven package 时,代码编译没有问题。然后,当我使用java -jar [文件名]运行生成的 jar 文件时,出现以下错误:

09:17:26.946 [main] ERROR o.s.boot.SpringApplication - Application startup failed
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is java.lang.NoSuchMethodError: org.apache.tomcat.util.scan.StandardJarScanner.setJarScanFilter(Lorg/apache/tomcat/JarScanFilter;)V
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474) ~[spring-context-4.1.6.RELEASE.jar!/:4.1.6.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686) [spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) [spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:957) [spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:946) [spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    at com.ninjasquare.server.Application.main(Application.java:13) [NinjaSquareServer-0.0.1-SNAPSHOT.jar!/:0.0.1-SNAPSHOT]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_75]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53) [NinjaSquareServer-0.0.1-SNAPSHOT.jar!/:0.0.1-SNAPSHOT]
    at java.lang.Thread.run(Thread.java:745) [na:1.7.0_75]
Caused by: java.lang.NoSuchMethodError: org.apache.tomcat.util.scan.StandardJarScanner.setJarScanFilter(Lorg/apache/tomcat/JarScanFilter;)V
    at org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner$Tomcat8TldSkipSetter.setSkipPattern(SkipPatternJarScanner.java:106) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    at org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.setPatternToTomcat8SkipFilter(SkipPatternJarScanner.java:61) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    at org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.<init>(SkipPatternJarScanner.java:56) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    at org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.apply(SkipPatternJarScanner.java:87) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.prepareContext(TomcatEmbeddedServletContainerFactory.java:168) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:154) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:157) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE]
    ... 13 common frames omitted

I think the issue is because I don't have the right versions of Spring/Spring Boot running (perhaps it's trying to use an incorrect version of Tomcat so the method doesn't exist?)

我认为问题是因为我没有运行正确版本的 Spring/Spring Boot(也许它试图使用不正确版本的 Tomcat,所以该方法不存在?)

Update 2015-04-06:I tried kucing_terbang's suggestion of using spring boot v1.1.10 but now get the error as follows:

2015-04-06 更新:我尝试了 kucing_terbang 的使用 spring boot v1.1.10 的建议,但现在得到如下错误:

[Stacktrace deleted, as out of space for stackoverflow question, refer to stacktrace of v1.1.12.RELEASE below]

Update 2015-04-07:I then tried with v1.1.12.RELEASE which gave similar errors:

2015-04-07 更新:然后我尝试使用 v1.1.12.RELEASE,它给出了类似的错误:

07:41:29.917 [main] INFO  o.s.b.f.a.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
07:41:29.949 [main] WARN  o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:124) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:476) ~[spring-context-4.0.9.RELEASE.jar!/:4.0.9.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:109) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:952) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:941) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at com.ninjasquare.server.Application.main(Application.java:13) [NinjaSquareServer-0.0.1-SNAPSHOT.jar!/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_75]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53) [NinjaSquareServer-0.0.1-SNAPSHOT.jar!/:na]
    at java.lang.Thread.run(Thread.java:745) [na:1.7.0_75]
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:174) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:147) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:121) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    ... 13 common frames omitted

07:41:29.952 [main] ERROR o.s.boot.SpringApplication - Application startup failed
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:124) ~[spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:476) ~[spring-context-4.0.9.RELEASE.jar!/:4.0.9.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:109) ~[spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:952) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:941) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at com.ninjasquare.server.Application.main(Application.java:13) [NinjaSquareServer-0.0.1-SNAPSHOT.jar!/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_75]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53) [NinjaSquareServer-0.0.1-SNAPSHOT.jar!/:na]
    at java.lang.Thread.run(Thread.java:745) [na:1.7.0_75]
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:174) ~[spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:147) ~[spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:121) ~[spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE]
    ... 13 common frames omitted

I then tried a mvn clean and mvn package again, which gave me the following error on compile:

然后我再次尝试了 mvn clean 和 mvn 包,这在编译时给了我以下错误:

[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[6,46] cannot find symbol
  symbol:   class SpringBootApplication
  location: package org.springframework.boot.autoconfigure
[ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[9,2] cannot find symbol
  symbol: class SpringBootApplication
[ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[6,46] cannot find symbol
  symbol:   class SpringBootApplication
  location: package org.springframework.boot.autoconfigure
[ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[9,2] cannot find symbol
  symbol: class SpringBootApplication
[INFO] 4 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12.839s
[INFO] Finished at: Tue Apr 07 07:31:41 BST 2015
[INFO] Final Memory: 24M/63M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project NinjaSquareServer: Compilation failure: Compilation failure:
[ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[6,46] cannot find symbol
[ERROR] symbol:   class SpringBootApplication
[ERROR] location: package org.springframework.boot.autoconfigure
[ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[9,2] cannot find symbol
[ERROR] symbol: class SpringBootApplication
[ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[6,46] cannot find symbol
[ERROR] symbol:   class SpringBootApplication
[ERROR] location: package org.springframework.boot.autoconfigure
[ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[9,2] cannot find symbol
[ERROR] symbol: class SpringBootApplication
[ERROR] -> [Help 1]

However if I using v1.2.3.RELEASE I don't get the compile error, and if I then change to v1.1.12.RELEASE and run mvn package without a clean, I don't get the error either (but I get the error when running the jar as before).

但是,如果我使用 v1.2.3.RELEASE 我不会收到编译错误,如果我然后更改为 v1.1.12.RELEASE 并在没有清理的情况下运行 mvn 包,我也不会收到错误(但我得到像以前一样运行 jar 时出错)。

Perhaps this is indicative of a deeper issue?

也许这表明一个更深层次的问题?

Any help with this issue would be much appreciated.

对这个问题的任何帮助将不胜感激。

Thanks!

谢谢!

采纳答案by kucing_terbang

I tried to run your code in my local pc and there was an error similar like what happened in your place. And, these are the steps that I did to remove those error.

我试图在我的本地电脑上运行你的代码,但出现了一个类似于你所在位置发生的错误。而且,这些是我为消除这些错误所做的步骤。

  1. Update the spring boot version

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.1.12.RELEASE</version>
    </parent>
    
  2. Update your main class as @SpringBootApplicationannotation only exists after spring boot version 1.2.0

    @Configuration
    @EnableAutoConfiguration
    @ComponentScan
    public class Application {
         public static void main(String[] args) {
                ApplicationContext ctx = SpringApplication.run(Application.class, args);
    
                System.out.println("NinjaSquare server up and running with Spring Boot!");
                System.out.println("Let's inspect the beans provided by Spring Boot:");
    
                String[] beanNames = ctx.getBeanDefinitionNames();
                Arrays.sort(beanNames);
                for (String beanName : beanNames) {
                    System.out.println(beanName);
                }
            }
    }
    
  3. Remove the "webapp-runner" dependency from pom.xmlas this library also has class org.apache.catalina.core.StandardContextwhich conflicted with the one from embedded tomcat library.

    <dependency>
        <groupId>com.github.jsimone</groupId>
        <artifactId>webapp-runner</artifactId>
        <version>${com.github.jsimone.version}</version>
        <scope>provided</scope>
    </dependency>
    

    Yes, remove those lines ;)

  4. Run the application and then, profit ?

  1. 更新spring boot版本

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.1.12.RELEASE</version>
    </parent>
    
  2. 更新您的主类,因为@SpringBootApplication注解仅在 Spring Boot 1.2.0 版之后存在

    @Configuration
    @EnableAutoConfiguration
    @ComponentScan
    public class Application {
         public static void main(String[] args) {
                ApplicationContext ctx = SpringApplication.run(Application.class, args);
    
                System.out.println("NinjaSquare server up and running with Spring Boot!");
                System.out.println("Let's inspect the beans provided by Spring Boot:");
    
                String[] beanNames = ctx.getBeanDefinitionNames();
                Arrays.sort(beanNames);
                for (String beanName : beanNames) {
                    System.out.println(beanName);
                }
            }
    }
    
  3. 删除 " webapp-runner" 依赖项,pom.xml因为该库也有org.apache.catalina.core.StandardContext与嵌入式 tomcat 库中的类冲突的类。

    <dependency>
        <groupId>com.github.jsimone</groupId>
        <artifactId>webapp-runner</artifactId>
        <version>${com.github.jsimone.version}</version>
        <scope>provided</scope>
    </dependency>
    

    是的,删除这些行;)

  4. 运行应用程序,然后获利?

回答by Ahatius

I had this error happen to me because I created a Maven project using the webapp archetype.

我发生了这个错误,因为我使用 webapp 原型创建了一个 Maven 项目。

Recreating the project as a simple Maven project solved this issue.

将项目重新创建为一个简单的 Maven 项目解决了这个问题。

回答by Abdullah Khan

I had the exact same issue with Spring bootand the embedded tomcat server.

我有完全相同的问题Spring bootembedded tomcat server.

How i fixed it

我是如何修复它的

After many hours of hit and trial, running and re-runningi found that i had initially added local tomcat server to my projectwhich was conflicting with the embedded tomcat server that Spring Bootprovides. After removing the Tomcat Server from the projects build path running Spring Bootwas like a charm.

经过数小时的尝试和试验运行和重新运行后,我发现我最初将本地 tomcat 服务器添加到我的项目中,这与提供的嵌入式 tomcat 服务器冲突Spring Boot。从项目构建路径中删除 Tomcat 服务器后,运行Spring Boot就像一个魅力。

Just right click the project

只需右键单击该项目

Build Path --> Configure Build Path --> Libraries(Tab)

and remove your Tomcat server runtime if you have added one by mistake. You should be good to go now.

如果您错误地添加了 Tomcat 服务器运行时,请删除您的 Tomcat 服务器运行时。你现在应该可以走了。

回答by Green Lei

I got the error because I copied some jar files from tomcat's lib folder to jdk's lib folder.So it have an incompatible version of Tomcat on the classpath. I solved this issue after reinstalling jdk.

我收到错误是因为我将一些 jar 文件从 tomcat 的 lib 文件夹复制到 jdk 的 lib 文件夹。因此它在类路径上有一个不兼容的 Tomcat 版本。重新安装jdk后我解决了这个问题。

回答by Pasang

I had my error solved by changing the Apache Tomcat Version 9 to Version 8.5 that was not supported by Spring Boot 1.5

我通过将 Apache Tomcat 版本 9 更改为 Spring Boot 1.5 不支持的版本 8.5 解决了我的错误

回答by Noureldin Fawzy

Update the spring boot version

更新spring boot版本

<parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.1.12.RELEASE</version>
</parent>