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

运行Cucumber特性文件时出现NoSuchMethodError错误,如何解决?

解决Cucumber+Thucydides的NoSuchMethodError问题

这两个错误本质上都是依赖版本不兼容/冲突导致的——NoSuchMethodError通常意味着你编译时依赖的库版本包含某个方法,但运行时实际加载的库版本要么没有这个方法,要么方法签名已经变了。下面给你拆解问题和对应的解决步骤:

问题1:net.thucydides.core.steps.StepEventBus.isBaseStepListenerRegistered()Z

这个错误是因为你使用的Thucydides(现已更名为Serenity BDD)版本和Cucumber版本不匹配,导致Thucydides核心类在运行时找不到预期的方法。现在官方推荐使用serenity-cucumber依赖来整合两者,避免旧版Thucydides的兼容性问题。

问题2:cucumber.runtime.RuntimeOptions.formatter(Ljava/lang/ClassLoader;)Lcucumber/api/formatter/Formatter;

这个错误是Cucumber自身的版本冲突:比如你同时引入了不同版本的cucumber-core、cucumber-junit,或者Thucydides依赖的Cucumber版本和你自己声明的版本不一致,导致运行时加载了不兼容的Cucumber核心类。


具体解决步骤

1. 统一依赖版本(核心方案)

使用依赖管理工具(Maven/Gradle)的BOM(Bill of Materials)来锁定所有相关库的兼容版本,避免手动版本匹配出错:

Maven示例配置:

在pom.xml中添加dependencyManagement导入Serenity和Cucumber的BOM,声明具体依赖时无需指定版本:

<dependencyManagement>
    <dependencies>
        <!-- Serenity BDD 统一版本 -->
        <dependency>
            <groupId>net.serenity-bdd</groupId>
            <artifactId>serenity-bom</artifactId>
            <version>3.9.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- Cucumber 统一版本 -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-bom</artifactId>
            <version>7.14.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!-- Serenity + Cucumber 整合依赖 -->
    <dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-cucumber</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- Serenity + JUnit 整合 -->
    <dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-junit</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- Cucumber + JUnit 整合 -->
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-junit</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

Gradle示例配置:

plugins {
    id 'java'
    id 'net.serenity-bdd.serenity-gradle-plugin' version '3.9.0'
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation platform('net.serenity-bdd:serenity-bom:3.9.0')
    testImplementation platform('io.cucumber:cucumber-bom:7.14.0')
    
    testImplementation 'net.serenity-bdd:serenity-cucumber'
    testImplementation 'net.serenity-bdd:serenity-junit'
    testImplementation 'io.cucumber:cucumber-junit'
}

2. 排查并清理依赖冲突

运行依赖树命令,找出重复或版本不一致的库:

  • Maven:mvn dependency:tree
  • Gradle:./gradlew dependencies

如果发现多个版本的cucumber-core或thucydides-core,可以在依赖声明中排除旧版本,示例Maven排除:

<dependency>
    <groupId>某个依赖</groupId>
    <artifactId>某个依赖名</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 清理并重新构建项目

  • 清理编译输出目录:
    • Maven:mvn clean
    • Gradle:./gradlew clean
  • 重新编译运行:
    • Maven:mvn test
    • Gradle:./gradlew test

4. 检查IDE缓存

如果IDE(IntelliJ/Eclipse)依然报错,刷新依赖缓存:

  • IntelliJ:右键项目 → Maven → Reload Project
  • Eclipse:右键项目 → Maven → Update Project(勾选"Force Update of Snapshots/Releases")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:59:33