You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 17.0.4.1报错:module java.base未"opens java.lang"求助

解决Java 17下Maven编译时的InaccessibleObjectException错误

这个错误是Java 17模块化机制导致的——你的代码或依赖库用反射访问了java.lang.ClassLoader的受保护构造方法,但JDK的java.base模块没开放java.lang包给未命名模块(也就是你的项目代码)。下面是几个可行的解决办法:

1. 给Maven编译插件添加JVM参数开放模块访问

直接在pom.xml里配置maven-compiler-plugin,添加--add-opens参数,让java.base模块把java.lang包开放给所有未命名模块:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version> <!-- 用兼容Java17的最新版本 -->
            <configuration>
                <source>17</source>
                <target>17</target>
                <compilerArgs>
                    <arg>--add-opens=java.base/java.lang=ALL-UNNAMED</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

如果运行测试或启动程序时也遇到相同错误,还要给maven-surefire-plugin(测试插件)或exec-maven-plugin(运行插件)加上同样的compilerArgs参数。

2. 排查并修复反射相关的代码或依赖

  • 检查依赖库:有些老版本的工具库(比如ASM、CGLIB、某些字节码生成框架)还没适配Java 17的模块规则,升级这些依赖到支持Java 17的版本就能解决问题。
  • 检查自己的代码:如果是你自己写的反射代码调用了ClassLoader的无参构造,换成合法的API,比如用ClassLoader.getSystemClassLoader()获取类加载器,或者自定义ClassLoader时通过父类构造的正常方式初始化。

3. 临时降级Java版本(不推荐)

如果暂时没时间适配Java 17,可以降级到Java 8或11——这两个版本对JDK内部API的反射限制没那么严格。但这只是权宜之计,长期来看还是建议适配模块化机制,避免后续版本的兼容性问题。

内容的提问来源于stack exchange,提问作者SunnyVN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:45:44