web-dev-qa-db-fra.com

Accès illégal réfléchi par org.springframework.cglib.core.ReflectUtils $ 1

Mon application CLI JDK 9 + 181 Spring Boot 2.0.0.BUILD-SNAPSHOT affiche cet avertissement au démarrage:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (jar:file:/home/jan/src/fm-cli/target/fm-cli-0.1.0-SNAPSHOT.jar!/BOOT-INF/lib/spring-core-5.0.0.RELEASE.jar!/) to method Java.lang.ClassLoader.defineClass(Java.lang.String,byte[],int,int,Java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1

Ceci est une application console, je dois donc désactiver cet avertissement - comment puis-je le faire?

Remarque: Cette question pose la question spécifique de la désactivation de cet avertissement déclenché par Spring; il ne s'agit pas d'un doublon de JDK9: une opération d'accès réflectif illégale s'est produite. org.python.core.PySystemState qui traite un symptôme similaire dans une bibliothèque différente.

29
Jan Nielsen

Dans JDK 9+, ajoutez l'option suivante à la machine virtuelle Java pour désactiver l'avertissement suite à l'utilisation de CGLIB par Spring:

--add-opens Java.base/Java.lang=ALL-UNNAMED

par exemple:

Java --add-opens Java.base/Java.lang=ALL-UNNAMED -jar target/*.jar

Pas besoin de le signaler; c'est un bogue de printemps connu

Cela est dû au fait que le nouveau système de module JDK 9 a détecté un accès illégal qui sera interdit dans un avenir proche. Vous pouvez en savoir plus sur le système de modules JDK 9 ici .

Mettre à jour:

JDK 9+ avec Spring 5.1+ est disponible pour résoudre ce problème.

44
Jan Nielsen

Pour ajouter à la réponse de Jan Nielsen ci-dessus, si vous utilisez Intellij et Spring Boot 2.0.3, qui dépendent de Spring Core 5.0.7, vous êtes toujours bloqué et n'avez pas le correctif. 

La sortie pour moi avait besoin de deux choses:

  • Ajoutez le --add-opens mentionné par Jan à votre configuration run/debug. Il suffit de modifier la configuration et de regarder sous Environnement/Options VM. Cela permet de réduire au silence certains "messages d'accès illégal".

  • J'avais également besoin d'ajouter une dépendance à la bibliothèque jaxb-api. Le commentaire de ValentinBossi sur ce numéro de github de printemps .

3
Coffee_fan

Lorsque vous utilisez l'initialiseur de ressort, veillez à utiliser la dernière version de Spring Boot. Spring Core 5.1 ou une version supérieure s’affiche automatiquement pour vous et vous ne verrez pas l’erreur lors de l’exécution du projet. 

Vous n’avez donc pas à vous soucier de la modification d’une configuration JVM.

2
Onome Sotu

Après ces avertissements, si votre application ne fonctionne toujours pas, ajoutez cette dépendance à votre pom.xml.

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>

Cela m'a aidé !!

1