Java.lang.reflect.InaccessibleObjectException: 无法使jdk.internal.loader.ClassLoaders成为可访问对象

6

我遇到了类似异常的问题:java.lang.reflect.InaccessibleObjectException:无法使 jdk.internal.loader.ClassLoaders$AppClassLoader(jdk.internal.loader.ClassLoaders$PlatformClassLoader,jdk.internal.loader.URLClassPath) 可访问:模块 java.base 未向未命名模块 @45f08579 开放 jdk.internal.loader
这是在我使用库 compile group: 'com.github.snowindy',name:'scriptlet4docx',version: '0.8.6' 后发生的。

我找到了一些解决方案,如下所示:
1. 从此处使用 java --add-opens java.base/java.lang=ALL-UNNAMED
2. 使用以下命令行:java --add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED -jar scriptlet4docx-0.8.6.jar

我尝试在终端中运行这个命令,但它没有起作用。我也尝试添加虚拟机选项,例如:enter image description here 或者 enter image description here,但是它们都没有起作用...

我在IntelliJ中使用的是默认版本的jdk11。


在您的情况下,该库的名称为:如果反射代码位于命名模块中,则ALL-UNNAMED可以替换为其名称。 - IQbrod
1个回答

8

实际上,该帖子的解决方案指出您必须使用与Blow JVM镜像相同的JVM,这个JVM选项不在IntelliJ中,而是在Gradle中。

因此我在build.gradle中添加了这段代码,然后它就起作用了。

tasks.withType(JavaExec) {
    jvmArgs += ['--add-opens', 'java.base/jdk.internal.loader=ALL-UNNAMED']
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接