web-dev-qa-db-fra.com

Exécuter une erreur d'application de démarrage: Impossible d'instancier l'interface org.springframework.context.ApplicationListener

J'ai un projet de printemps et j'essaie de l'utiliser avec une botte de printemps et de l'utiliser sur Tomcat intégré comme suit:

https://spring.io/guides/gs/rest-service/

Ceci est mon application

//@Configuration
//@EnableAspectJAutoProxy
@SpringBootApplication
@ComponentScan(basePackages = "gux.prome")
public class Application {

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

}

Si j'utilise la commande maven: mvn spring-boot:run, le projet démarre correctement, mais je dois déboguer. Je lance donc cette méthode principale sur InteliJ. Une exception se produit:

Exception in thread "main" Java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.context.ApplicationListener : org.springframework.boot.logging.ClasspathLoggingApplicationListener
    at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.Java:414)
    at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.Java:394)
    at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.Java:385)
    at org.springframework.boot.SpringApplication.initialize(SpringApplication.Java:263)
    at org.springframework.boot.SpringApplication.<init>(SpringApplication.Java:237)
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1191)
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1180)
    at gux.prome.config.Application.main(Application.Java:19)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.Java:134)
Caused by: Java.lang.NoClassDefFoundError: org/springframework/context/event/GenericApplicationListener
....

C'est le pom:

<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>gux</groupId>
  <artifactId>prome-data</artifactId>


  <version>1.0-SNAPSHOT</version>
  <name>prome-data Maven Webapp</name>
  <url>http://maven.Apache.org</url>

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

  <dependencies>

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

    <!-- guava -->
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>18.0</version>
    </dependency>
    <!-- end of guava -->


    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.9.2</version>
    </dependency>

  </dependencies>


  <properties>
    <Java.version>1.7</Java.version>
  </properties>


  <build>

    <finalName>prome-data</finalName>

    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>

      <!--<plugin>-->
      <!-- use Java 7 -->
        <!--<artifactId> maven-compiler-plugin</artifactId>-->
        <!--<version>3.1</version>-->
        <!--<configuration>-->
          <!--<source> 1.7</source>   -->
          <!--<target> 1.7</target>-->
        <!--</configuration>-->
      <!--</plugin>-->

    </plugins>
  </build>

  <!--<repositories>-->
    <!--<repository>-->
      <!--<id>spring-releases</id>-->
      <!--<url>http://repo.spring.io/libs-release</url>-->
    <!--</repository>-->
  <!--</repositories>-->

  <!--<pluginRepositories>-->
    <!--<pluginRepository>-->
      <!--<id>spring-releases</id>-->
      <!--<url>http://repo.spring.io/libs-release</url>-->
    <!--</pluginRepository>-->
  <!--</pluginRepositories>-->


</project>
10
Jaskey

Ceci est le symptôme d'une incompatibilité de version quelque part dans vos dépendances Spring, mais pas nécessairement uniquement Spring Boot et Spring lui-même. J'avais ceci entre mes parents Spring Boot:

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

et ma dépendance à Spring Cloud Config:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-config-client</artifactId>
  <version>1.0.4.RELEASE</version>
</dependency>

Pour une raison quelconque, je ne suis pas en mesure de définir la dépendance client-cloud-config-client sans déclaration de version explicite.

La mise à jour à la dernière version (1.3.5.RELEASE et 1.1.1.RELEASE) a résolu le problème. 

Conclusion
Mettez à jour vos dépendances avec les dernières correctes

15
ISparkes

j'ai eu la même erreur, je viens de changer la version du parent de démarrage de printemps et maintenant tout fonctionne bien

0
petrucci