java.lang.module.FindException: cucumber-core-7.3.4.jar模块描述符报错
报错信息
运行Cucumber测试时抛出如下错误:
java.lang.module.FindException: Unable to derive module descriptor for cucumber-core-7.3.4.jar
问题场景
- 初始创建普通Java项目,参考公开的Cucumber入门教程操作,还未进行到Selenium集成步骤就触发上述错误
- 最初采用手动导入jar包的方式引入依赖,所有依赖均选择最新版本,所用jar包版本如下:

- 检索解决方案时发现多数方案依赖Maven的pom.xml配置,因此将普通项目转换为Maven项目,问题未解决;后续执行禁用Maven特性操作,问题依然存在。当前项目为Maven项目,执行到教程中配置Cucumber运行参数的步骤时固定抛出该错误
- 项目包资源管理器结构如下:

问题根因
- JPMS模块系统冲突:使用Java 9及以上版本时,JVM默认启用模块化机制,会自动对非模块化jar包推导模块描述符。cucumber-core 7.3.4.jar的元数据中存在不符合模块命名规则的条目,导致JVM解析直接失败,这是该报错的核心触发原因。
- 依赖管理混乱:手动导入jar包本身极易出现版本不匹配、重复引入的问题,后续在普通Java项目和Maven项目之间反复切换,会残留大量无效依赖、重复构建配置,进一步引发类加载冲突。
- 教程版本不匹配:参考的两份入门教程均基于Java 8 + 旧版Cucumber(6.x及更早版本)编写,配置逻辑和高版本JDK、Cucumber 7.x版本存在兼容性差异,直接照搬步骤必然触发异常。
解决方案
按照以下步骤操作即可解决问题:
- 第一步:清理冗余项目配置
删除当前旧项目,不要在原有项目上反复修改。手动删除项目根目录下残留的pom.xml、target文件夹,以及IDE生成的.classpath、.project、.settings等配置文件,避免旧配置干扰。 - 第二步:新建干净Maven项目
重新创建一个纯Maven项目,不要手动导入任何jar包,所有依赖统一通过Maven管理。在项目的pom.xml中添加如下Cucumber依赖,注意所有Cucumber相关依赖的版本号必须完全一致:
添加后等待Maven自动拉取依赖即可,不需要额外手动下载jar包。<dependencies> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-java</artifactId> <version>7.3.4</version> <scope>test</scope> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-junit</artifactId> <version>7.3.4</version> <scope>test</scope> </dependency> </dependencies> - 第三步:规避模块化冲突
二选一即可:- 方案A(最简单,无额外配置):将项目的编译、运行JDK版本切换为Java 8,Java 8没有引入JPMS模块化机制,不会触发模块描述符解析逻辑,完美兼容Cucumber 7.3.4版本。
- 方案B(保留高版本JDK):不要在项目中创建
module-info.java文件,运行Cucumber测试时,将所有Cucumber依赖放在类路径(classpath)而非模块路径(modulepath)下,同时给JVM添加启动参数--add-opens java.base/java.lang=ALL-UNNAMED,绕过模块解析限制。
- 第四步:验证运行
按照教程编写Feature文件和对应的步骤定义代码后,直接运行JUnit测试类即可正常启动Cucumber。
内容的提问来源于stack exchange,提问作者coder9090
相关产品推荐
相关产品推荐

