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

使用cucumber-groovy并行运行Cucumber场景遇类找不到及步骤定义问题

Cucumber-Groovy项目Gradle运行报错及步骤定义找不到问题

运行命令 ./gradlew cucumber -Denv=test -Ptags=@myTest --continue --no-daemon 时出现以下错误:

Error: Could not find or load main class io.cucumber.core.cli.Main
Caused by: java.lang.ClassNotFoundException: io.cucumber.core.cli.Main

本地已存在相关依赖,在IntelliJ运行配置中设置Main class:io.cucumber.core.cli.Main无报错,但运行时提示步骤定义未找到(可从特征文件跳转至步骤定义)。当前使用Gradle 5.0,build.gradle中cucumber任务配置如下:

doLast {
    javaexec {
        main = "io.cucumber.core.cli.Main"
        classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
        systemProperty "parallel", System.properties.getProperty("parallel", setParallel)
        if (setParallel == "true") cucumberArgs.addAll(cucumberThreadsOption)
        args = cucumberArgs
        jvmArgs = [
                "-Denv=$env",
        ]
    }
}

依赖配置:

dependencies {
    implementation "io.cucumber:cucumber-core:5.1.3"
    implementation "io.cucumber:cucumber-groovy:5.1.3"
    compile "org.codehaus.groovy:groovy-all:2.5.6"
}

核心问题1:找不到io.cucumber.core.cli.Main

你的依赖配置和Gradle任务的classpath不匹配:

  • 任务中使用了configurations.cucumberRuntime作为classpath的一部分,但当前依赖是用implementation和compile声明的,这些依赖不会自动加入cucumberRuntime配置中。
  • Gradle的cucumberRuntime默认继承自testRuntime,所以需要把Cucumber相关依赖放到testImplementation,或者直接给cucumberRuntime配置添加依赖。

修正方案(二选一):

方案A:改用testImplementation声明依赖
dependencies {
    testImplementation "io.cucumber:cucumber-core:5.1.3"
    testImplementation "io.cucumber:cucumber-groovy:5.1.3"
    testImplementation "org.codehaus.groovy:groovy-all:2.5.6"
}
方案B:直接给cucumberRuntime添加依赖
dependencies {
    cucumberRuntime "io.cucumber:cucumber-core:5.1.3"
    cucumberRuntime "io.cucumber:cucumber-groovy:5.1.3"
    cucumberRuntime "org.codehaus.groovy:groovy-all:2.5.6"
}

核心问题2:步骤定义未找到

排除依赖问题后,这个问题通常由以下原因导致:

  1. Groovy文件未被编译:确保build.gradle开头已应用Groovy插件,否则Gradle会忽略Groovy文件,导致步骤定义无法被编译到classpath中:
apply plugin: 'groovy'
apply plugin: 'java'
  1. 未指定步骤定义的扫描路径:Cucumber需要明确知道去哪里找步骤定义,需要在cucumberArgs中添加--glue参数指定包路径。比如你的步骤定义在com.example.steps下,修改任务配置:
args = cucumberArgs + ['--glue', 'com.example.steps']
  1. classpath未正确包含步骤定义:确认sourceSets.test.output确实包含了步骤定义的编译产物,检查test目录下的Groovy文件是否被正确编译到build/classes/groovy/test目录中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:45:42