奇闻异事之NoSuchMethodError


title: 奇闻异事之NoSuchMethodError tags:

  • NoSuchMethodError
  • maven categories: 工作日志 date: 2017-12-05 22:09:37

背景

今天小伙伴开发碰到一个问题,在本地环境IDE调不通新发布的rpc接口中的新加的method

报错NoSuchMethodError

即使重启IDE也无法掉通

由于现场已经不存在 就不贴详细的报错堆栈了

思路

  1. NoSuchMethodError偏向于该方法不存在那么可能是远程rpc未发布新的接口?
  2. 项目采用maven,报NoSuchMethodError的是公司内部方法不存在版本冲突【初步排除版本冲突】

由于思路2被排除那么就只能思考是否是远程没有发布 于是通过查看rpc的工具真是服务端确实发布了该方法

并且发现其他客户端成功调用了同一个服务端的对应接口方法【为排除配置错误 比如连上了不同版本 不同ip的服务】

调查一度陷入了僵局

既然排除了思路1 那根据福尔摩斯所说【排除一切不可能的,剩下的即使再不可能,那也是真相】 当然一切不可能也只是所学知识范围内的不可能而已

于是继续考虑思路2

怀疑是否存在同一个类在classpath中

通过访问对应web的target目录 发现确实存在两个不同版本的接口包

此时问题了然!确实是由于同一个class在不同版本中存在导致 大家知道这是典型的jar冲突!

那么在使用maven的时候同样的GA为何没有被自动选择呢?

猜测如下:

开发者在更新pom文件时并没有关闭当前应用由于重新import pom时不能需要删除旧版本的jar同时引入新版本的jar

但是由于当前应用正在运行 java进程占用了旧版本的jar导致maven reimport时无法删除旧版本jar【未通过maven命令而是IDE的GUI reimport操作】

那么此时classpath中就存在了两个不同版本的jar 即使关闭当前应用重启也不能删除就旧版本jar 需要mvn clean之后重新运行

由于ide也引入了新的jar 因此编译也不会报错 只是在运行时实际存在两个不同的jar

通过和对应开发沟通发现确实如此 通过clean命令后应用可以正常调用!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值