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

运行基础Cucumber测试用例出现java.lang.ExceptionInInitializerError如何解决

错误根源

该报错是Java 9及以上版本引入的模块系统强封装机制与旧版Cucumber依赖冲突导致:你使用的Cucumber 1.2.5属于已停止维护的老旧版本,其内部集成的XStream序列化库需要通过反射访问JDK内部java.util.TreeMap的私有字段,Java 9+默认禁止此类反射操作,因此抛出InaccessibleObjectException异常。

解决方案

以下方案优先级从高到低:

  • 方案1:升级依赖到兼容高版本JDK的版本(优先推荐)
    info.cukes组下的Cucumber早已停止官方维护,替换为io.cucumber组下的新版本依赖即可解决兼容问题,参考POM配置:
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>7.14.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>7.14.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.15.0</version>
</dependency>
<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.13.2</version> 
    <scope>test</scope> 
</dependency>
  • 方案2:添加JVM启动参数绕过限制(适合暂时无法升级依赖的场景)
    在测试运行的JVM参数中添加以下配置,开放对应JDK内部模块的反射权限:
    --add-opens java.base/java.util=ALL-UNNAMED
    如果后续出现其他同类模块访问报错,可对应添加其他模块的开放配置。Eclipse环境配置路径:运行配置 -> 对应JUnit运行项 -> Arguments标签 -> VM arguments栏添加上述参数即可。
  • 方案3:降级JDK版本到Java 8
    Java 8无模块系统限制,旧版Cucumber 1.2.5可在JDK8环境下正常运行,无需修改任何代码和依赖配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:09:01