该类利用反射来调用属于 ClassLoader 的私有方法。
--add-opens
解决了这个问题,它允许指定模块,以便反射成功工作。但是,这种方法似乎不适用于动态加载的模块,即启动后加载的模块。
--add-opens java.base/java.lang=foobar
和下面的代码。
try
{
Method method = ClassLoader.class.getDeclaredMethod("findLoadedClass", String.class);
method.setAccessible(true);
// ...
}
catch (NoSuchMethodException | InaccessibleObjectException e)
{
// InaccessibleObjectException will be thrown.
}
然后我在启动时收到此警告:WARNING: Unknown module: foobar specified to --add-opens
module-info.class
,打算将其作为未命名模块加载,并在 JVM 启动时将
--add-opens
用于
ALL_UNNAMED
模块。 然而,由于其他技术限制,这种方法并不可行。有人可以指导我如何对 JVM 启动后动态加载的模块有效地使用 --add-opens 吗?
我应该考虑其他方法吗?
所以要解决这个问题,你必须让“java.base”打开“java.security”来模块未命名模块@75226b29,并且每次该模块的名称更改时,你必须使用以下命令为所有未命名模块打开它:
--add-opens java.base/java.security=ALL-UNNAMED