Hor*_*ux7 5 reflection classloader java-9
我们仅在测试框架中使用此类型的Reflection,而不是在生产中.我们希望根据我们的测试代码将一些jar文件添加到app类加载器.它有什么解决方法吗?我们如何才能访问未导出的类?
java.lang.reflect.InaccessibleObjectException: Unable to make member of class jdk.internal.loader.ClassLoaders$AppClassLoader accessible: module java.base does not export jdk.internal.loader to unnamed module @9f73a2
at jdk.internal.reflect.Reflection.throwInaccessibleObjectException(Reflection.java:414)
at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:174)
at java.lang.reflect.Method.checkCanSetAccessible(Method.java:191)
at java.lang.reflect.Method.setAccessible(Method.java:185)
Run Code Online (Sandbox Code Playgroud)
无法通过代码访问模块内部类.这是故意的.但是命令行有一个解决方法 - 一个非标准化的选项java可以满足您的需求:
--add-exports <module>/<package>=<target-module>(,<target-module>)*
updates <module> to export <package> to <target-module>,
regardless of module declaration.
<target-module> can be ALL-UNNAMED to export to all
unnamed modules.
Run Code Online (Sandbox Code Playgroud)
Java 9是一个移动目标,确切的语法已经改变了几次 - 就像这个答案一样.这意味着(a)下面的一些评论似乎已经过时了,(b)旗帜可能不会完全像那样.请留下评论,它将得到修复.