出現(xiàn)java.lang.NoSuchMethodException異常的解決(靠譜)
java.lang.NoSuchMethodException異常解決
首先,這個(gè)錯(cuò)誤必然是運(yùn)行期間的,網(wǎng)上說(shuō)了一堆,檢查類有沒(méi)有這個(gè)方法,我覺(jué)得都是廢話,沒(méi)有這個(gè)方法,能通過(guò)編譯?
下面我分享一個(gè)我項(xiàng)目運(yùn)行報(bào)錯(cuò)java.lang.NoSuchMethodException
情景
- 第一,我保證自己項(xiàng)目絕對(duì)有這個(gè)類和這個(gè)方法。且有一個(gè)?
- 第二,其他什么形參也都正確,從服務(wù)器拿包下來(lái),反編譯class文件也都沒(méi)問(wèn)題。阿,這。。。。。
反復(fù)打包反復(fù)發(fā)布到生產(chǎn)都不行,但是奇葩的是,測(cè)試環(huán)境并沒(méi)有報(bào)錯(cuò)。
于是玄學(xué)了一天,本來(lái)完全肯定是有同包同名的另一個(gè)class類存在,而這個(gè)類沒(méi)有我要得方法。折騰了大半天,失去了信心。
有一個(gè)前提
我們本地jar包啟動(dòng)springboot都沒(méi)有這個(gè)錯(cuò)誤。都是打包到外部容器,war包運(yùn)行就會(huì)出現(xiàn)這個(gè)錯(cuò)誤。
終于
idea全局搜索了意外看到了All Places,發(fā)現(xiàn)maven引的一個(gè)jar包也存在同包同名的另一個(gè)class,坑人啊。
沒(méi)有選All Places,只能找到項(xiàng)目工程下的,并不能找到j(luò)ar包里面的內(nèi)容。
找到這個(gè)同包同名的class文件之后,刪除也好,maven排除依賴也好,都可以,按實(shí)際情況來(lái)定。
總結(jié)
存在同包同名的class文件,方法不一致,由于jvm的類加載機(jī)制,可能會(huì)加載另一個(gè)不是我們想要的class。
所以在運(yùn)行的時(shí)候報(bào)錯(cuò)java.lang.NoSuchMethodException.
最后:
請(qǐng)仔細(xì)檢查類沖突?。。?/strong>
請(qǐng)仔細(xì)檢查類沖突?。?!
請(qǐng)仔細(xì)檢查類沖突?。。?/strong>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java Code Cache滿導(dǎo)致應(yīng)用性能降低問(wèn)題解決
這篇文章主要介紹了Java Code Cache滿導(dǎo)致應(yīng)用性能降低問(wèn)題解決,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Java 數(shù)據(jù)結(jié)構(gòu)之時(shí)間復(fù)雜度與空間復(fù)雜度詳解
算法復(fù)雜度分為時(shí)間復(fù)雜度和空間復(fù)雜度。其作用: 時(shí)間復(fù)雜度是度量算法執(zhí)行的時(shí)間長(zhǎng)短;而空間復(fù)雜度是度量算法所需存儲(chǔ)空間的大小2021-11-11java實(shí)現(xiàn)的MD5摘要算法完整實(shí)例
這篇文章主要介紹了java實(shí)現(xiàn)的MD5摘要算法,結(jié)合完整實(shí)例形式分析了java實(shí)現(xiàn)md5單項(xiàng)加密的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-01-01Java中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式流程詳解
中綴表達(dá)式是一個(gè)通用的算術(shù)或邏輯公式表示方法。,中綴表達(dá)式不容易被計(jì)算機(jī)解析,但仍被許多程序語(yǔ)言使用,因?yàn)樗先藗兊钠毡橛梅ā1疚慕榻B了實(shí)現(xiàn)中綴表達(dá)式的方法,需要的可以參考一下2022-09-09簡(jiǎn)單了解redis常見(jiàn)客戶端及Sharding機(jī)制原理
這篇文章主要介紹了簡(jiǎn)單了解redis常見(jiàn)客戶端及Sharding機(jī)制原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09熟練掌握J(rèn)ava8新特性之Stream API的全面應(yīng)用
Stream是Java8的一大亮點(diǎn),是對(duì)容器對(duì)象功能的增強(qiáng),它專注于對(duì)容器對(duì)象進(jìn)行各種非常便利、高效的 聚合操作(aggregate operation)或者大批量數(shù)據(jù)操作。Stream API借助于同樣新出現(xiàn)的Lambda表達(dá)式,極大的提高編程效率和程序可讀性,感興趣的朋友快來(lái)看看吧2021-11-11springboot使用RedisRepository操作數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了springboot使用RedisRepository操作數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05