Java项目从JDK11升级至JDK17后集成测试遇InaccessibleObjectException报错求助
解决JDK17迁移中java.lang.reflect的InaccessibleObjectException错误
你的错误明确指向java.base模块未将java.lang.reflect包开放给未命名模块,而你当前的argLine配置里正好缺少了这个包的--add-opens参数,这就是测试仍失败的核心原因。
修正后的JVM参数配置
把--add-opens java.base/java.lang.reflect=ALL-UNNAMED加入到你的argLine中,完整配置如下:
<argLine> --illegal-access=permit --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/sun.reflect=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED </argLine>
额外注意事项
- 确保参数正确传递:如果你用Maven,要确认该配置是在
failsafe-plugin的configuration节点下(集成测试由Failsafe插件负责,而非单元测试用的Surefire),避免参数被错误应用到单元测试进程。 - 长远优化建议:
--illegal-access=permit在JDK17中已被标记为废弃,后续版本会移除。建议逐步替换为精确的--add-opens参数,只开放测试代码实际依赖的包,减少不必要的安全风险。
内容的提问来源于stack exchange,提问作者maverickabhi
相关产品推荐
相关产品推荐

