奇闻异事之NoSuchMethodError
title: 奇聞異事之NoSuchMethodError tags:
- NoSuchMethodError
- maven categories: 工作日志 date: 2017-12-05 22:09:37
背景
今天小伙伴開發碰到一個問題,在本地環境IDE調不通新發布的rpc接口中的新加的method
報錯NoSuchMethodError
即使重啟IDE也無法掉通
由于現場已經不存在 就不貼詳細的報錯堆棧了
思路
由于思路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命令后應用可以正常調用!
總結
以上是生活随笔為你收集整理的奇闻异事之NoSuchMethodError的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 背水一战 Windows 10 (41)
- 下一篇: vi 编辑器命令 (share)