运行Cucumber功能文件报错java.base未开放java.util给未命名模块如何解决
问题根因
该错误是Java 9及以上版本引入的模块系统与旧版本Cucumber依赖的XStream库不兼容导致:旧版XStream需要通过反射访问JDK内置java.util包下的私有成员,Java模块系统默认禁止了未声明权限的跨模块反射访问,因此抛出InaccessibleObjectException。
解决方案(按优先级从高到低选择)
- 方案1:升级Cucumber到最新稳定版
这是最彻底的解决方案,7.x及以上版本的Cucumber已经完成了高版本Java的适配,无需额外配置即可正常运行。请将项目中所有Cucumber相关依赖(如cucumber-java、cucumber-junit、cucumber-core等)的版本统一升级到最新稳定版即可。 - 方案2:添加JVM启动参数临时适配
如果暂时无法升级Cucumber版本,可以在运行配置的VM选项中添加模块开放参数,放开对应包的反射访问权限:
如果后续还出现其他包的同类访问报错,可以按需追加对应参数,比如:--add-opens java.base/java.util=ALL-UNNAMED
IDEA中配置路径:打开右上角的运行配置面板,找到你执行Cucumber用的配置项,在「VM options」输入框中粘贴上述参数后保存运行即可。--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.time=ALL-UNNAMED - 方案3:降级JDK版本到Java 8
Java 8没有模块系统限制,如果你项目允许使用JDK 8运行,将项目的SDK和运行时都切换为Java 8即可直接解决该问题。
内容的提问来源于stack exchange,提问作者Анна Мейшутович
相关产品推荐
相关产品推荐

