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 ?