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

使用JUnit+Cucumber生成Extent报告时遇NoClassDefFoundError问题求助

Fixing java.lang.NoClassDefFoundError: gherkin/formatter/Reporter with Cucumber + JUnit + Extent Reports

Hey there, let's tackle this frustrating error you're hitting. That NoClassDefFoundError for gherkin/formatter/Reporter is almost always tied to dependency version mismatches or missing required libraries between Cucumber, Gherkin, and the Extent Reports adapter. Here's how to fix it step by step:

1. Verify Version Compatibility Between Cucumber, Gherkin, and Extent Adapter

The biggest culprit here is using mismatched versions. The gherkin/formatter/Reporter class was part of older Gherkin versions, and newer Cucumber releases (v5+) restructured their dependencies, which breaks older Extent adapters.

Example Compatible Dependency Sets

For Cucumber 4.x (stable with older Extent adapters):

<!-- Cucumber Core -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>4.8.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>4.8.1</version>
    <scope>test</scope>
</dependency>

<!-- Extent Reports Adapter for Cucumber 4 -->
<dependency>
    <groupId>com.aventstack</groupId>
    <artifactId>extentreports-cucumber4-adapter</artifactId>
    <version>1.0.12</version>
    <scope>test</scope>
</dependency>

<!-- Gherkin (aligns with Cucumber 4.x) -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>gherkin</artifactId>
    <version>5.1.0</version>
    <scope>test</scope>
</dependency>

For Cucumber 7.x (latest, uses updated Extent adapters):

If you're on a newer Cucumber version, you need the corresponding Extent adapter that supports the new Gherkin structure:

<!-- Cucumber Core -->
<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-platform-engine</artifactId>
    <version>7.14.0</version>
    <scope>test</scope>
</dependency>

<!-- Extent Reports Adapter for Cucumber 7 -->
<dependency>
    <groupId>com.aventstack</groupId>
    <artifactId>extentreports-cucumber7-adapter</artifactId>
    <version>1.12.0</version>
    <scope>test</scope>
</dependency>

2. Remove Conflicting or Duplicate Dependencies

Check your pom.xml for duplicate Gherkin or Cucumber entries. Sometimes Maven pulls in transitive dependencies that clash with your explicit ones. Run this command to list all dependencies and spot duplicates:

mvn dependency:tree

If you find conflicting versions, exclude the unwanted ones using Maven's <exclusions> tag in your dependency entries.

3. Clean and Rebuild Your Project

Maven cache can sometimes hold corrupted or outdated jars. Run these commands to refresh everything:

mvn clean
mvn install -U

The -U flag forces Maven to update snapshots and release dependencies.

4. Validate Your Cucumber Runner Class

Make sure your runner class uses the correct annotations for your Cucumber version:

  • For Cucumber 4.x + JUnit 4:
import org.junit.runner.RunWith;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/resources/features",
    glue = "com.yourpackage.stepdefinitions",
    plugin = {"com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:"}
)
public class TestRunner {
}
  • For Cucumber 7.x + JUnit 5:
import io.cucumber.junit.platform.engine.Cucumber;

@Cucumber
@CucumberOptions(
    features = "src/test/resources/features",
    glue = "com.yourpackage.stepdefinitions",
    plugin = {"com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:"}
)
public class TestRunner {
}

5. Double-Check Extent Plugin Configuration

Ensure the plugin entry in @CucumberOptions matches your adapter version—both Cucumber 4 and 7 use the same plugin path, but the adapter itself must be the correct version for your Cucumber setup.

If you've tried all this and still hit the error, share your full pom.xml and runner class code, and we can dig deeper!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:01:03