wake-up-neo.com

Die Schnittstelle org.springframework.context.ApplicationListener kann nach dem Hinzufügen von spring-security-oauth2 nicht instanziiert werden

Hinweis:
Sie können ein Mindestbeispiel auf github klonen: https://github.com/silentsnooc/spring-oauth-issue . Führen Sie einfach mahlzeit.api.service.Application als Java-Anwendung aus.

Nachdem ich spring-security-oauth2 zu meiner pom.xml hinzugefügt habe:

<dependency>
    <groupId>org.springframework.security.oauth</groupId>
    <artifactId>spring-security-oauth2</artifactId>
    <version>2.2.0.RELEASE</version>
</dependency>

Ich fing an zu bekommen 

Exception in thread "main" Java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.context.ApplicationListener : org.springframework.boot.context.logging.ClasspathLoggingApplicationListener
    at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.Java:439)
    at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.Java:418)
    at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.Java:409)
    at org.springframework.boot.SpringApplication.<init>(SpringApplication.Java:268)
    at org.springframework.boot.SpringApplication.<init>(SpringApplication.Java:247)
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1245)
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1233)

nachdem ich meinen @SpringBootApplication ausgeführt habe. Bitte beachten Sie, dass ich Spring Boot 2.0.0.M5 verwende und ich denke, dass dies die Ursache des Problems sein kann (zB Versionen).

Dies ist die gesamte pom.xml, die ich verwende :;

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <parent>
        <artifactId>server</artifactId>
        <groupId>mahlzeit</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>api</artifactId>

    <properties>
        <spring.boot.version>2.0.0.M5</spring.boot.version>
    </properties>

    <dependencies>

        <!-- Spring Framework Boot -->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring.boot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <version>${spring.boot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>${spring.boot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${spring.boot.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- Spring Framework -->

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-jwt</artifactId>
            <version>1.0.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4.1208-jdbc42-atlassian-hosted</version>
        </dependency>

        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

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

    <repositories>
        <!-- Required since this is currently using Spring RC version -->
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

</project>

Ich habe den Verdacht, dass dies mit widersprüchlichen Versionen zu tun haben könnte - die meisten Antworten auf stackoverflow sind genau das -, aber ich kann nicht herausfinden, was ich hier wirklich habe.


Die Versionshinweise für Spring Boot 2.0.0.M5:

OAuth 2.0-Unterstützung

Die Funktionalität des Spring Security OAuth-Projekts wird auf die Spring-Kernsicherheitsumgebung migriert. Die Unterstützung für OAuth 2.0-Clients wurde bereits hinzugefügt, und zusätzliche Funktionen werden zu gegebener Zeit migriert.

Wenn Sie sich auf Spring Security OAuth-Funktionen verlassen, die noch nicht migriert wurden, müssen Sie org.springframework.security.oauth:spring-security-oauth2 hinzufügen und die Einstellungen manuell konfigurieren. Wenn Sie nur die Unterstützung für OAuth 2.0-Clients benötigen, können Sie die von Spring Boot 2.0 bereitgestellte automatische Konfiguration verwenden. Wir unterstützen auch weiterhin Spring Boot 1.5, so dass ältere Anwendungen dies weiterhin verwenden können, bis ein Aktualisierungspfad angegeben wird.

4
displayname

Nachdem wir die Probleme mit dem Pom des Beispiels behoben haben, kann ich jetzt die vollständige Stapelverfolgung des Fehlers sehen:

Exception in thread "main" Java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.context.ApplicationListener : org.springframework.boot.context.logging.ClasspathLoggingApplicationListener
    at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.Java:439)
    at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.Java:418)
    at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.Java:409)
    at org.springframework.boot.SpringApplication.<init>(SpringApplication.Java:268)
    at org.springframework.boot.SpringApplication.<init>(SpringApplication.Java:247)
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1245)
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1233)
    at mahlzeit.api.Application.main(Application.Java:14)
Caused by: Java.lang.NoClassDefFoundError: org/springframework/context/event/GenericApplicationListener
    at Java.lang.ClassLoader.defineClass1(Native Method)
    at Java.lang.ClassLoader.defineClass(ClassLoader.Java:763)
    at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:142)
    at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:467)
    at Java.net.URLClassLoader.access$100(URLClassLoader.Java:73)
    at Java.net.URLClassLoader$1.run(URLClassLoader.Java:368)
    at Java.net.URLClassLoader$1.run(URLClassLoader.Java:362)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(URLClassLoader.Java:361)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:424)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:331)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:357)
    at org.springframework.util.ClassUtils.forName(ClassUtils.Java:255)
    at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.Java:431)
    ... 7 more
Caused by: Java.lang.ClassNotFoundException: org.springframework.context.event.GenericApplicationListener
    at Java.net.URLClassLoader.findClass(URLClassLoader.Java:381)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:424)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:331)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:357)
    ... 21 more

Die Hauptursache des Problems ist, dass sich org.springframework.context.event.GenericApplicationListener nicht im Klassenpfad befindet. Diese Klasse ist Teil des spring-context-Moduls und neu in Spring Framework 4.2.

Wenn Sie sich das Pom anschauen, verwenden Sie nicht die Abhängigkeitsverwaltung von Boot (entweder durch Importieren von spring-boot-dependencies bom oder durch Verwendung von spring-boot-starter-parent als übergeordnetes Projekt. Dies bedeutet, dass die Versionen von transitiven Abhängigkeiten nicht verwaltet werden Ihr Projekt verwendet 4.0.9.RELEASE von spring-context transitiv über spring-security-oauth2.

Ich würde dringend empfehlen, dass Sie das Abhängigkeitsmanagement von Spring Boot verwenden. Wenn Sie dies nicht tun möchten oder dies aus einem nicht genannten Grund nicht tun können, müssen Sie manuell sicherstellen, dass alle transitiven Abhängigkeiten Versionen unterstützen.

6
Andy Wilkinson

Durch das Aktualisieren des Maven-Projekts wurde mein Problem behoben.

Klicken Sie mit der rechten Maustaste auf Ihr Project -> Maven -> Update Project oder Shortcut Alt+F5

Wählen Force Update of Snapshots/Releases

enter image description here

0
Anantha Raju C

Versuchen Sie, die folgende Konfiguration zu verwenden, und hoffen Sie, dass das Problem dadurch gelöst wird.

<?xml version="1.0" encoding="UTF-8"?>
<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>YOUR GROUP ID</groupId>
<artifactId>ART ID</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>YOUR PROJECT NAME</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.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.8</Java.version>
</properties>
....
[YOUR REST OF CONFIGURATIONS]
....
</project>

Viel Glück ! Salam

0
HA S