web-dev-qa-db-fra.com

Impossible de démarrer le composant [StandardEngine [Tomcat] .StandardHost [hôte local] .TomcatEmbeddedContext []]

J'essaie de créer une application SpringBoot.

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

    @SpringBootApplication
    public class App {

        @SuppressWarnings("unused")
        public static void main(String[] args) throws Exception {
            ApplicationContext ctx = SpringApplication.run(App.class, args);
        }
    }

Mais, lorsque j'essaie d'exécuter l'application, cela me renvoie l'erreur ci-dessous:

2017-03-27 13:55:58.281  INFO 8608 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2017-03-27 13:55:58.299  INFO 8608 --- [           main] o.Apache.catalina.core.StandardService   : Starting service Tomcat
2017-03-27 13:55:58.302  INFO 8608 --- [           main] org.Apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.11
2017-03-27 13:55:58.554 ERROR 8608 --- [cat-startStop-1] org.Apache.catalina.core.ContainerBase   : A child container failed during start

Java.util.concurrent.ExecutionException: org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]
    at Java.util.concurrent.FutureTask.report(FutureTask.Java:122) [na:1.8.0_73]
    at Java.util.concurrent.FutureTask.get(FutureTask.Java:192) [na:1.8.0_73]
    at org.Apache.catalina.core.ContainerBase.startInternal(ContainerBase.Java:939) ~[Tomcat-embed-core-8.5.11.jar:8.5.11]
    at org.Apache.catalina.core.StandardHost.startInternal(StandardHost.Java:872) [Tomcat-embed-core-8.5.11.jar:8.5.11]
    at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150) [Tomcat-embed-core-8.5.11.jar:8.5.11]
    at org.Apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.Java:1419) [Tomcat-embed-core-8.5.11.jar:8.5.11]
    at org.Apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.Java:1409) [Tomcat-embed-core-8.5.11.jar:8.5.11]
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:266) [na:1.8.0_73]
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142) [na:1.8.0_73]
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617) [na:1.8.0_73]
    at Java.lang.Thread.run(Thread.Java:745) [na:1.8.0_73]
Caused by: org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]
    at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:167) [Tomcat-embed-core-8.5.11.jar:8.5.11]
    ... 6 common frames omitted
Caused by: org.Apache.catalina.LifecycleException: Failed to start component [Pipeline[StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]]
    at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:167) [Tomcat-embed-core-8.5.11.jar:8.5.11]
    at org.Apache.catalina.core.StandardContext.startInternal(StandardContext.Java:5099) ~[Tomcat-embed-core-8.5.11.jar:8.5.11]
    at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150) [Tomcat-embed-core-8.5.11.jar:8.5.11]
    ... 6 common frames omitted
Caused by: org.Apache.catalina.LifecycleException: Failed to start component [org.Apache.catalina.authenticator.NonLoginAuthenticator[]]
    at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:167) [Tomcat-embed-core-8.5.11.jar:8.5.11]
    at org.Apache.catalina.core.StandardPipeline.startInternal(StandardPipeline.Java:170) ~[Tomcat-embed-core-8.5.11.jar:8.5.11]
    at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150) [Tomcat-embed-core-8.5.11.jar:8.5.11]
    ... 8 common frames omitted
Caused by: Java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
    at org.Apache.catalina.authenticator.AuthenticatorBase.startInternal(AuthenticatorBase.Java:1137) ~[Tomcat-embed-core-8.5.11.jar:8.5.11]
    at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150) [Tomcat-embed-core-8.5.11.jar:8.5.11]
    ... 10 common frames omitted

mon fichier pom.xml actuel est le suivant:

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>XXXX</groupId>
  <artifactId>XXXX</artifactId>
  <version>0.0.1-SNAPSHOT</version>

<!-- JSON -->
<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

 <dependency>
   <groupId>commons-lang</groupId>
   <artifactId>commons-lang</artifactId>
   <version>2.2</version>
 </dependency>

<dependency>
   <groupId>com.Sun.jersey</groupId>
   <artifactId>jersey-client</artifactId>
   <version>1.19.3</version>
</dependency >

<dependency>
   <groupId>com.Sun.jersey</groupId>
   <artifactId>jersey-json</artifactId>
   <version>1.19.3</version>
</dependency>

<!-- REST Services  -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>1.5.0.RELEASE</version>
</dependency>  

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

<!-- <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-Tomcat</artifactId>
    <version>1.5.0.RELEASE</version>
</dependency> -->


  <!-- SLF4J Logging -->
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.4</version>
    <scope>compile</scope>
  </dependency>  

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.6.4</version>
    <scope>runtime</scope>
  </dependency>

  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.4</version>
    <scope>runtime</scope>
  </dependency> 

  </dependencies>

  <build>
  <sourceDirectory>src</sourceDirectory>
  <plugins>

    <!-- Set a compiler level -->
    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.3</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
  </plugins>
</build>
</project>

Comme mentionné dans certains messagesSO, j'ai essayé de supprimer (Jersey), d'ajouter (intégré Tomcat) des dépendances. Mais l'erreur ne semble pas avoir d'effet sur les changements.

J'ai aussi essayé et un autre projet simple (application) de Spring Tutorials (pour ajouter deux nombres), cela a la suivante 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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>SpringBootDemoProject</groupId>
  <artifactId>SpringBootDemoProject</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
  <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>1.5.0.RELEASE</version>
</dependency>  
 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>1.5.0.RELEASE</version>
</dependency>

  </dependencies>
  <build>  
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Cela fonctionne parfaitement bien. Des indications quant à pourquoi c'est le cas?

4
Betafish

On dirait que vous avez une version incompatible de l'API Servlet dans votre chemin de classe . Cela aurait pu être une dépendance des jarres Jersey . Essayez de tirer le démarreur du maillot des démarreurs de démarrage Spring.

org.springframework.boot : spring-boot-starter-jersey

Cela apportera la bonne version dans votre classpath.

3
Praneeth Ramesh

À mon avis, vous devez utiliser la classe ServletInitializer par défaut fournie dans le Spring Boot Project template d’Eclipse.

//SpringBootApplication.Java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootApplication.class, args);
    }
}

//ServletInitializer.Java
public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SpringBootApplication.class);
    }

}

Si vous n'utilisez pas la classe ServletInitializer comme spécifié dans le modèle Spring Boot Starter Project, essayez d'étendre la variable SpringBootServletInitializer à partir de votre classe App.

public class App extends SpringBootServletInitializer

Veuillez cocher une réponse similaire ici

0
somnathchakrabarti

Pour moi, mettre à jour javax.servlet-api vers la version 4.0.1 a été efficace:

<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency>

0
Elhanan Mishraky