110 votes

Comment résoudre l'exception InaccessibleObjectException ("Impossible de rendre {member} accessible : le module {A} n' ouvre pas {package} à {B}") sur Java 9?

Cette exception se produit dans de nombreux scénarios lors de l'exécution d'une application sur Java 9. Certaines bibliothèques et frameworks (Spring, Hibernate, JAXB) y sont particulièrement sujets. Voici un exemple de Javassist :

java.lang.reflect.InaccessibleObjectException: Impossible de rendre accessible protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError : le module java.base n'ouvre pas "java.lang" au module non nommé @1941a8ff
    à java.base/jdk.internal.reflect.Reflection.throwInaccessibleObjectException(Reflection.java:427)
    à java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:201)
    à java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:192)
    à java.base/java.lang.reflect.Method.setAccessible(Method.java:186)
    à javassist.util.proxy.SecurityActions.setAccessible(SecurityActions.java:102)
    à javassist.util.proxy.FactoryHelper.toClass2(FactoryHelper.java:180)
    à javassist.util.proxy.FactoryHelper.toClass(FactoryHelper.java:163)
    à javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:501)
    à javassist.util.proxy.ProxyFactory.createClass2(ProxyFactory.java:486)
    à javassist.util.proxy.ProxyFactory.createClass1(ProxyFactory.java:422)
    à javassist.util.proxy.ProxyFactory.createClass(ProxyFactory.java:394)

Le message dit :

Impossible de rendre accessible protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError : le module java.base n'ouvre pas "java.lang" au module non nommé @1941a8ff

Que faire pour éviter l'exception et permettre au programme de s'exécuter avec succès ?

3voto

Karol Golec Points 11

J'ai eu des avertissements avec hibernate 5.

Accès réfléchi illégal par javassist.util.proxy.SecurityActions

J'ai ajouté la dernière bibliothèque javassist aux dépendances gradle :

compile group: 'org.javassist', name: 'javassist', version: '3.22.0-GA'

Cela a résolu mon problème.

0voto

Mark Points 1

Comment dire à eclipse d'ajouter les exports lors de la compilation

J'ai suivi les étapes du commentaire ci-dessus mais dans la fenêtre contextuelle Configuration des ajouts d'exports, j'ai saisi les modules qui étaient en erreur et j'ai sélectionné la case à cocher opens au lieu de la case à cocher exports et l'ai enregistré. Cela a résolu mon problème.

0voto

Ramanuj Points 11

J'ai rencontré le même problème après avoir importé un projet Springboot existant basé sur JDK1.8 dans SpringTestSuite4. Lorsque j'ai démarré l'application sur un serveur Tomcat intégré, j'ai obtenu cette erreur

java.lang.reflect.InaccessibleObjectException: Impossible de rendre accessible protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError: le module java.base ne "ouvre pas java.lang" au module non nommé @140c9f39 %09

J'ai ajouté le JRE JDK1.8 pré-installé de mon PC à SpringTestSuite4 dans la section Installed JRE sous Window -> Preferences -> Java et j'ai défini le JRE ajouté comme celui par défaut. Ensuite j'ai cliqué sur Appliquer et ensuite sur Fermer.

Cela a fonctionné pour moi.

0voto

Kravi Points 191

Pour moi j'ai simplement changé la version de spring-boot-starter-web et ça a fonctionné pour moi

-1voto

Gowtham Points 1

Rencontré le même problème. Une des raisons pourrait être l'utilisation du mauvais JDK / Project SDK.

Pour résoudre ce problème dans Intellij:

Cliquez avec le bouton droit sur le projet Maven -> Ouvrez les paramètres du module -> Paramètres du projet -> Projet -> Sélectionnez votre SDK, le JDK 1.8 déjà installé

Cela a fonctionné pour moi !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X