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

解决Serenity BDD报TypeRegistryConfigurerSupplier类找不到异常

问题根因

java.lang.NoClassDefFoundError: io/cucumber/core/runtime/TypeRegistryConfigurerSupplier 是典型的Serenity BDD与Cucumber依赖版本不兼容问题。TypeRegistryConfigurerSupplier是Cucumber Core特定版本的内置类,出现该错误要么是Cucumber相关依赖被错误版本覆盖,要么是手动引入了和当前Serenity版本不适配的Cucumber独立依赖。

分步解决流程
  • 第一步:删除pom.xml中所有手动单独引入的cucumber-java、cucumber-junit、cucumber-core等Cucumber相关依赖。Serenity官方适配包已经自带了对应兼容版本的Cucumber依赖,手动指定版本极大概率触发版本冲突。
  • 第二步:全局统一所有Serenity相关依赖、Maven插件的版本号,禁止混穿不同大版本的Serenity包,可参考如下标准配置:
<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- 所有Serenity相关包统一用同一个版本号,选官方稳定版即可 -->
    <serenity.version>3.9.8</serenity.version>
</properties>

<dependencies>
    <!-- JUnit4适配,使用JUnit5则替换为serenity-junit5 -->
    <dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-junit</artifactId>
        <version>${serenity.version}</version>
    </dependency>
    <!-- Cucumber适配包,自带对应兼容版本Cucumber依赖,和serenity-cucumber7二选一即可,不要同时引入 -->
    <dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-cucumber</artifactId>
        <version>${serenity.version}</version>
    </dependency>
    <!-- Cucumber7及以上高版本用下面的适配包,替换上面的serenity-cucumber
    <dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-cucumber7</artifactId>
        <version>${serenity.version}</version>
    </dependency>
    -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>net.serenity-bdd.maven.plugins</groupId>
            <artifactId>serenity-maven-plugin</artifactId>
            <version>${serenity.version}</version>
            <executions>
                <execution>
                    <id>serenity-reports</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>aggregate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.1.2</version>
            <configuration>
                <includes>
                    <include>**/*Runner.java</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
</build>
  • 第三步:清理本地Maven缓存的冲突残留包,执行命令:
    mvn dependency:purge-local-repository -DreResolve=true
  • 第四步:检查测试Runner类的注解配置,不要导入旧版本Cucumber的类,标准写法参考:
import net.serenitybdd.cucumber.CucumberWithSerenity;
import org.junit.runner.RunWith;
import io.cucumber.junit.CucumberOptions;

@RunWith(CucumberWithSerenity.class)
@CucumberOptions(
        features = "src/test/resources/features",
        glue = "com.yourapp.steps",
        stepNotifications = true
)
public class TestRunner {
}

注意:禁止使用原生Cucumber类作为Runner,必须用CucumberWithSerenity;所有Cucumber相关注解必须从io.cucumber包导入,不要用旧版cucumber.api下的同名类。

验证修复

配置调整完成后,先执行mvn clean dependency:tree查看依赖树,搜索cucumber-core确认全局只有一个版本,且和当前Serenity版本匹配,再执行mvn clean verify即可正常运行。

常见踩坑点

  • 同时引入serenity-cucumber、serenity-cucumber6、serenity-cucumber7多个Cucumber适配包,触发类冲突
  • 其他第三方依赖传递引入了不兼容版本的Cucumber包,覆盖了Serenity自带的适配版本,这类情况直接在冲突依赖上添加<exclusions>标签排除错误版本的Cucumber包即可
  • Serenity依赖包版本和serenity-maven-plugin版本不一致,比如依赖用3.x版本,插件用2.x版本,也会触发类不兼容错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:12:40