奇闻异事之NoSuchMethodError
title: 奇聞異事之NoSuchMethodError tags:
- NoSuchMethodError
- maven categories: 工作日志 date: 2017-12-05 22:09:37
背景
今天小伙伴開(kāi)發(fā)碰到一個(gè)問(wèn)題,在本地環(huán)境IDE調(diào)不通新發(fā)布的rpc接口中的新加的method
報(bào)錯(cuò)NoSuchMethodError
即使重啟IDE也無(wú)法掉通
由于現(xiàn)場(chǎng)已經(jīng)不存在 就不貼詳細(xì)的報(bào)錯(cuò)堆棧了
思路
由于思路2被排除那么就只能思考是否是遠(yuǎn)程沒(méi)有發(fā)布 于是通過(guò)查看rpc的工具真是服務(wù)端確實(shí)發(fā)布了該方法
并且發(fā)現(xiàn)其他客戶(hù)端成功調(diào)用了同一個(gè)服務(wù)端的對(duì)應(yīng)接口方法【為排除配置錯(cuò)誤 比如連上了不同版本 不同ip的服務(wù)】
調(diào)查一度陷入了僵局
既然排除了思路1 那根據(jù)福爾摩斯所說(shuō)【排除一切不可能的,剩下的即使再不可能,那也是真相】 當(dāng)然一切不可能也只是所學(xué)知識(shí)范圍內(nèi)的不可能而已
于是繼續(xù)考慮思路2
懷疑是否存在同一個(gè)類(lèi)在classpath中
通過(guò)訪問(wèn)對(duì)應(yīng)web的target目錄 發(fā)現(xiàn)確實(shí)存在兩個(gè)不同版本的接口包
此時(shí)問(wèn)題了然!確實(shí)是由于同一個(gè)class在不同版本中存在導(dǎo)致 大家知道這是典型的jar沖突!
那么在使用maven的時(shí)候同樣的GA為何沒(méi)有被自動(dòng)選擇呢?
猜測(cè)如下:
開(kāi)發(fā)者在更新pom文件時(shí)并沒(méi)有關(guān)閉當(dāng)前應(yīng)用由于重新import pom時(shí)不能需要?jiǎng)h除舊版本的jar同時(shí)引入新版本的jar
但是由于當(dāng)前應(yīng)用正在運(yùn)行 java進(jìn)程占用了舊版本的jar導(dǎo)致maven reimport時(shí)無(wú)法刪除舊版本jar【未通過(guò)maven命令而是IDE的GUI reimport操作】
那么此時(shí)classpath中就存在了兩個(gè)不同版本的jar 即使關(guān)閉當(dāng)前應(yīng)用重啟也不能刪除就舊版本jar 需要mvn clean之后重新運(yùn)行
由于ide也引入了新的jar 因此編譯也不會(huì)報(bào)錯(cuò) 只是在運(yùn)行時(shí)實(shí)際存在兩個(gè)不同的jar
通過(guò)和對(duì)應(yīng)開(kāi)發(fā)溝通發(fā)現(xiàn)確實(shí)如此 通過(guò)clean命令后應(yīng)用可以正常調(diào)用!
總結(jié)
以上是生活随笔為你收集整理的奇闻异事之NoSuchMethodError的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 背水一战 Windows 10 (41)
- 下一篇: vi 编辑器命令 (share)