IntelliJ TestNG Maven项目报IInvokedMethodListener2缺失错误
IntelliJ运行TestNG Maven项目报
java.lang.NoClassDefFoundError: org/testng/IInvokedMethodListener2解决方案 IInvokedMethodListener2是TestNG 6.9.10及以上版本才提供的接口,该报错的核心原因是运行时类路径加载到的TestNG版本过低,或是类路径下存在多版本TestNG依赖冲突,按以下步骤排查修复:
- 移除所有手动添加的TestNG jar包
Maven项目手动往项目目录、IDE依赖中添加本地TestNG jar,极易和Maven管理的依赖产生版本冲突,先把之前手动导入的所有TestNG相关jar全部从项目依赖、lib目录中删除,所有依赖统一交给Maven管理。 - 修正pom.xml中的TestNG依赖配置
检查pom.xml中引入的TestNG版本,确保版本号不低于6.9.10,推荐使用7.x稳定版本,依赖配置参考如下:
注意不要随意修改TestNG依赖的scope配置,默认test scope即可,不要设置为provided。配置完成后在项目根目录执行<dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.7.1</version> <scope>test</scope> </dependency>mvn dependency:tree查看依赖树,搜索所有testng相关条目,如果存在其他组件传递引入的低于6.9.10版本的TestNG,在对应依赖中添加<exclusions>标签排除低版本传递依赖。 - 清理Maven与IntelliJ缓存
- 点击IntelliJ右侧Maven面板的刷新按钮,重新导入全部Maven依赖
- 依次点击菜单栏
File -> Invalidate Caches...,勾选清除文件系统缓存选项,点击Invalidate and Restart重启IDE - 重启后在项目根目录执行
mvn clean test,先确认命令行执行测试不会抛出该错误,排除Maven环境本身的问题
- 检查TestNG运行配置
- 点击右上角运行配置下拉框,选择
Edit Configurations - 找到对应的TestNG运行项,确认
Use classpath of module选中的是当前项目的正确模块,不要误选其他无关模块 - 检查配置中是否有手动指定旧版TestNG jar路径的设置,如有全部删除,选择使用模块类路径运行
- 点击右上角运行配置下拉框,选择
- 排查插件冲突
如果安装了第三方TestNG增强插件、旧版TestNG IDE插件,先临时禁用后重启IDE再试,部分低版本第三方插件会自带旧版TestNG类,引发版本冲突。
内容的提问来源于stack exchange,提问作者mahesh takkalwad
相关产品推荐
相关产品推荐

