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

Java11迁移至Java17测试遇模块访问权限问题求助

问题根源

你遇到的错误是Java 17模块系统限制了反射访问导致的:java.util.Arrays$ArrayList的私有字段a需要被反射读取,但java.base模块未将java.util包开放给未命名模块(unnamed module)。你之前使用的--add-opens java.lang/java.util=ALL-UNNAMED参数存在模块路径错误——java.util属于java.base模块,而非java.lang模块。

正确解决方案

1. 修正JVM参数

使用正确的--add-opens参数开放java.base模块下的java.util包:

--add-opens java.base/java.util=ALL-UNNAMED

2. 在构建工具中配置参数

如果通过Maven或Gradle运行测试,需将参数配置到对应测试插件中:

  • Maven(Surefire插件):
    在pom.xml的build/plugins节点添加:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <argLine>--add-opens java.base/java.util=ALL-UNNAMED</argLine>
        </configuration>
    </plugin>
    
  • Gradle:
    在build.gradle的test任务中添加:
    test {
        jvmArgs '--add-opens', 'java.base/java.util=ALL-UNNAMED'
    }
    

3. 验证效果

重新运行测试,该参数会让java.base模块将java.util包的反射权限开放给所有未命名模块,解决ArraysAsListSerializer的反射访问问题。

内容的提问来源于stack exchange,提问作者Thomás Preis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:43:15