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

运行Cucumber自动化测试时出现NoClassDefFoundError错误如何解决

问题根因

该错误是Cucumber核心版本与ExtentReports Cucumber适配器版本不兼容导致的类加载失败:

  • 从7.x版本开始,Cucumber不再将Google Protobuf类内置打包到cucumber-messages模块的内部路径下,旧版本ExtentCucumberAdapter依赖的io.cucumber.messages.internal.com.google.protobuf.GeneratedMessageV3类已被移除
  • 当前项目使用的com.aventstack:extentreports-cucumber-adapter版本未适配本地引入的高版本Cucumber,触发类不存在异常
解决方案

方案1:对齐适配版本(推荐)

根据你使用的Cucumber主版本,替换为对应适配的Extent适配器:

  • Cucumber 7.x 版本,引入专属的7.x适配适配器,Maven依赖示例:
<dependency>
    <groupId>com.aventstack</groupId>
    <artifactId>extentreports-cucumber7-adapter</artifactId>
    <version>1.14.0</version>
</dependency>
  • Cucumber 6.x 版本,引入extentreports-cucumber6-adapter即可,不要使用无版本标识的旧版通用extentreports-cucumber-adapter

方案2:降级Cucumber版本

如果不需要高版本Cucumber的新特性,将所有Cucumber相关依赖(cucumber-core、cucumber-testng、cucumber-java等)统一降级到6.11.0及以下版本,该版本仍内置报错缺失的Protobuf内部类。

方案3:临时补全依赖(仅应急使用)

如果暂时无法调整主版本,手动引入Protobuf依赖补全缺失类:

<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.21.12</version>
</dependency>
后续检查

修复完成后执行依赖冲突检查,确保所有cucumber-开头的依赖版本完全一致,避免再次出现类加载冲突:

  • Maven项目执行命令:mvn dependency:tree | grep cucumber
  • Gradle项目执行命令:gradle dependencies | grep cucumber

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:57:02