1. 程式人生 > >java.lang.NoSuchMethodError的解決辦法

java.lang.NoSuchMethodError的解決辦法

 

問題

NoSuchMethodError是一個執行時錯誤,在編譯時一般不會出現這個錯誤。

既然能成功編譯,就說明方法本身是存在的,方法所在的類也是存在的,而且都可以正常的引用到。

那麼為什麼還會出現這個錯誤?

 

原因

方法本身是存在的,方法所在類也是存在的,那麼在執行時還會出現這個錯誤,就只能說明執行時引用的類裡面沒有這個方法。

這說起來有點拗口,簡單的說,就是存在至少兩個類名一樣的類A和B,其中A有一個need方法,B則沒有這個方法。編譯時,編譯器發現依賴路徑下有需要的類A或者B,則編譯通過。

但是執行時,在要呼叫A.need()方法時,因為A和B同名,錯誤的呼叫了B.need()方法,這個方法本身是不存在的,自然就出現了NoSuchMethodError這個錯誤

解決辦法

通過分析可以發現,其實問題產生的根本原因是類有衝突,也就是存在多個滿足條件的類A,B,C..

這種情況一般出現在引用某個庫或者jar時,同時引用了多個版本而導致的。

解決辦法也簡單,找出丟擲NoSuchMethodError這個異常的類,然後找出包含這個類的所有Jar,然後保留正確的辦法,把其他的jar刪掉,就可以了。

如果不知道哪個是正確的jar,請使用程式設計師都會的:

排除大法

一個一個試過去