Remarque:
Vous pouvez cloner un exemple minimum sur github: https://github.com/silentsnooc/spring-oauth-issue . Il suffit de lancermahlzeit.api.service.Application
en tant qu'application Java.
Après avoir ajouté spring-security-oauth2
à mon pom.xml:
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
J'ai commencé à avoir
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)
après avoir exécuté mon @SpringBootApplication
. Veuillez noter que j'utilise Spring Boot 2.0.0.M5 et je pense que cela pourrait être la cause du problème (versions w.r.t.).
Ceci est le pom.xml entier que j'utilise :;
<?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>
J'ai le soupçon que cela pourrait avoir à voir avec des versions en conflit - la plupart des réponses sur stackoverflow s'avèrent être que - mais je ne peux pas comprendre le problème réel que j'ai ici.
Les notes de version pour Spring Boot 2.0.0.M5 indiquent:
Support OAuth 2.0
La fonctionnalité du projet Spring Security OAuth est en cours de migration vers la version de base de Spring Security. La prise en charge du client OAuth 2.0 a déjà été ajoutée et des fonctionnalités supplémentaires seront migrées ultérieurement.
Si vous dépendez des fonctionnalités Spring Security OAuth qui n'ont pas encore été migrées, vous devrez ajouterorg.springframework.security.oauth:spring-security-oauth2
et configurer les éléments manuellement. Si vous avez uniquement besoin du support client OAuth 2.0, vous pouvez utiliser la configuration automatique fournie par Spring Boot 2.0. Nous continuons également à prendre en charge Spring Boot 1.5 afin que les applications plus anciennes puissent continuer à l’utiliser jusqu’à ce qu’un chemin de mise à niveau soit fourni.
Une fois les problèmes résolus avec le pompon de l'exemple, je peux maintenant voir la trace complète de la pile de l'échec:
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
La cause première du problème est que org.springframework.context.event.GenericApplicationListener
n'est pas sur le chemin de classe. Cette classe fait partie du module spring-context
et est nouvelle dans Spring Framework 4.2.
En regardant le pom, vous n'utilisez pas la gestion des dépendances de Boot (soit en important le spring-boot-dependencies
bom, soit en utilisant spring-boot-starter-parent
comme parent de votre projet. Cela signifie que les versions de toutes les dépendances transitives ne sont pas gérées. votre projet utilise 4.0.9.RELEASE de spring-context
de manière transitoire via spring-security-oauth2
.
Je vous recommande fortement d'utiliser la gestion des dépendances de Spring Boot. Si vous ne voulez pas faire cela ou ne pouvez pas le faire pour une raison non déclarée, vous devrez vous assurer manuellement que toutes les dépendances transitives ont des versions prises en charge.
Essayez d’utiliser la configuration suivante et espérez que cela résoudra le problème.
<?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>
Bonne chance ! Salam