Testng错误 java.lang.NoSuchMethodError: org.testng.remote.AbstractRemoteTestNG.addListener(Lorg/testng

写如下的testng 的demo

public class BasicAnnotation {

	@Test
	public void testCase1() {
		System.out.println("这是测试用例1");
	}
	@Test
	public void testCase2() {
		System.out.println("这是测试用例2");
	}
	
	@BeforeMethod
	public void beforeMethod() {
		System.out.println("BeforeMethod这是测试运行前");
	}
	
	@AfterMethod
	public void afterMethod() {
		System.out.println("AfterMethod这是测试运行后");
	}
}

Run As >> TestNG Test 运行Testng 发现如下报错
在这里插入图片描述
主要报错内容如下:

java.lang.NoSuchMethodError: org.testng.remote.AbstractRemoteTestNG.addListener(Lorg/testng/ISuiteListener;)V

主要原因为:
maven管理的version问题,有些版本的方法无法使用上述方法,我用的testng版本为7.0.0-beta7

解决办法:

<dependency>
     <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.9.10</version>
            <scope>test</scope>
</dependency>
### Java `NoSuchMethodError` 错误的原因及解决方案 #### 1. **错误产生的根本原因** `java.lang.NoSuchMethodError` 是一种运行时异常,通常发生在程序尝试调用某个方法时,而该方法在当前类加载器所加载的类中不存在。这种问题通常是由于以下原因之一引起的: - 方法签名不匹配:编译时使用的类库版本与运行时使用的类库版本不同[^1]。 - 类路径冲突:多个相同名称但不同版本的类库被引入到项目中,导致运行时加载了错误的版本[^2]。 --- #### 2. **具体场景分析** ##### 场景一:Math.floorMod 方法引发的错误 当部署项目后出现 `java.lang.NoSuchMethodError: java.lang.Math.floorMod(JI)I` 的错误时,可能是因为项目的 JDK 版本较低。`Math.floorMod` 方法是在 JDK 1.8 中新增的功能,如果运行环境使用的是低于 JDK 1.8 的版本,则会抛出此异常。因此,升级至兼容的 JDK 版本可以解决问题。 ##### 场景二:TestNG 报错 对于 `java.lang.NoSuchMethodError: org.testng.TestRunner.addListener(Ljava/lang/Object;)V` 这种情况,可能是 TestNG 库的不同版本之间存在 API 差异。建议检查并统一项目中的 TestNG 版本号,确保所有模块都基于相同的依赖版本[^3]。 ##### 场景三:MyBatis 分页查询报错 在 MyBatis 使用过程中遇到此类错误,通常是由第三方依赖(如 jsqlparser)版本过低引起。例如,在分页插件 PageHelper 和 JSQLParser 配合使用时,若后者版本低于 0.9,则可能导致方法缺失的情况。推荐更新相关依赖项至最新稳定版以修复问题[^4]。 ##### 场景四:Apache POI Excel 操作失败 创建 `XSSFWorkbook` 对象时报错 `java.lang.NoSuchMethodError` 可能源于 Apache POI 库版本之间的不一致。某些情况下,旧版本的 POI 不支持新特性或方法定义已更改;此时应确认 Maven 或 Gradle 文件内的 POI 组件是否为最新发布版本[^5]。 --- #### 3. **通用排查步骤** 以下是针对上述各种情形适用的一般性诊断流程: - **验证 JVM/SDK 版本** 确认目标平台上的 Java Development Kit (JDK)/Java Runtime Environment (JRE) 是否满足最低需求标准。 - **清理构建缓存** 执行命令清除本地仓库残留数据后再重新下载所需资源文件,比如通过执行以下指令刷新 Gradle/Maven 缓存: ```bash mvn clean install -U ``` - **审查 POM.XML / BUILD.GRADLE 定义** 明确声明各子系统的精确依赖关系及其对应标签属性值设置合理无误。 - **启用调试日志记录功能** 开启详细的跟踪模式以便于定位确切发生位置及相关上下文信息。 --- ### 示例代码调整 假设我们正在处理一个涉及多模块协作的应用系统,并且怀疑是因组件间相互干扰所致,则可以通过强制指定特定范围来规避潜在风险。下面给出一段修正后的配置样例供参考: ```xml <dependencies> <!-- 更新 JSQlParser 至较新的发行版 --> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>4.2</version><!-- 提升稳定性 --> </dependency> <!-- 同步 TestNG 插件一致性 --> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.4.0</version><!-- 当前主流分支 */ </dependency> <!-- 升级 Apache POI 支持更广泛格式解析能力 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> </dependencies> ``` --- #### 总结 综上所述,`java.lang.NoSuchMethodError` 大多数时候都是由开发环境中存在的隐含矛盾或者外部条件变化造成的。遵循以上指导原则逐一排除干扰因素即可有效缓解乃至彻底消除这类难题的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值