Java 9 模块化:解决'Unable to make field private final java.lang.Class java.lang.invoke.SerializedLambda.capturingClass accessible' 错误
这个问题是由于Java 9引入的模块化系统所导致的。在Java 9之前,所有的类都是在同一个命名空间中,可以互相访问。但是在Java 9中,所有的类都被分成了模块,每个模块都有自己的命名空间。在模块之间进行访问需要进行显式的导出和导入。
解决这个问题的方法是打开java.lang.invoke模块,使其对未命名模块(即应用程序)开放。可以在module-info.java文件中添加以下语句:
opens java.lang.invoke to unnamed module;
如果你正在使用maven,则可以在pom.xml文件中添加以下内容:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
<compilerArgs>
<arg>--add-exports</arg>
<arg>java.base/jdk.internal</arg>
<arg>to</arg>
<arg>ALL-UNNAMED</arg>
<arg>--add-opens</arg>
<arg>java.base/java.lang.invoke=ALL-UNNAMED</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
这将在编译时自动添加所需的导出和导入语句。
原文地址: https://www.cveoy.top/t/topic/oLet 著作权归作者所有。请勿转载和采集!