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

JDK11/19运行Cucumber特性文件报ClassGraph类未找到错误求助

解决JDK11/19下Karate执行Cucumber Feature时的ClassGraph类找不到问题

问题复现

使用JDK11或19,在名为demo的Maven项目中通过「Run as -> cucumber feature」执行Karate特性文件时,抛出错误:

Exception in thread "main" java.lang.NoClassDefFoundError: io/github/classgraph/ClassGraph

项目已引入Karate框架依赖,Maven本地仓库中存在classgraph-4.8.149.jar,但JDK8下运行完全正常。

解决方法

1. 升级Karate版本到兼容JDK11+的版本

旧版Karate(如1.3.x及以下)对JDK9+引入的模块系统(JPMS)适配不足,建议直接升级到Karate 1.4.0及以上版本,新版本已优化对JPMS的支持,可自动处理ClassGraph的类加载逻辑。

2. 显式添加ClassGraph测试依赖

若升级Karate后仍存在问题,直接在pom.xml中显式声明ClassGraph的测试依赖,避免传递依赖缺失:

<dependency>
    <groupId>io.github.classgraph</groupId>
    <artifactId>classgraph</artifactId>
    <version>4.8.149</version>
    <scope>test</scope>
</dependency>

3. 修正IDE运行配置的类路径

在Eclipse中检查Cucumber运行配置的类路径:

  • 打开「Run Configurations」,找到对应的Cucumber Feature配置项
  • 切换到「Classpath」标签,确认classgraph-4.8.149.jar在「Test classpath」列表中
  • 若缺失,点击「Add JARs...」,从Maven本地仓库中找到该jar并添加

4. 适配JDK模块系统

  • 模块化项目(含module-info.java):在模块声明中添加对ClassGraph的依赖:
module demo {
    requires io.github.classgraph;
    requires com.intuit.karate;
    // 其他必要的模块依赖声明
}
  • 非模块化项目:在运行VM参数中添加以下配置,放开JDK内部API的访问限制:
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.io=ALL-UNNAMED

5. 清理并重新构建项目

执行Maven清理构建命令,确保依赖被正确同步:

mvn clean install

随后在IDE中右键项目 -> 「Maven」-> 「Update Project」,强制刷新依赖缓存。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:27:10