no such method error 的原因、解決方法和預防


一、原因

classloader加載的類里找不到對應的方法,要么是沒有對應的方法函數,要么是由於包沖突,引入了錯誤的包,加載了錯誤的類。

如果是第一種可以通過查看源碼或者jad命令/工具(jd-gui)反編譯jar看一下。

image

這個時候將會 no such method method3 exception,在compile的時候,沒有問題。在method3被user1調用的時候,類加載時候,

class loader的時候會load xml-beans-3.1.0.jar,load了錯誤了類,自然找不到method3。


二、解決思路:

1)首先通過shade-pom.xml打包,然后通過下面的命令查看一下是否引入了對應的包

mvn dependency:list -f shaded-pom.xml -DskipTests -Dmaven.javadoc.skip=true -DreleaseVersion=xxxx | grep "xmlbean"


2)確認引入的版本

mvn dependency:tree -Dincludes=org.apache.xmlbeans

image

然后反編譯對應版本,查看對應類的方法有哪些。


3)解決方法:

保證 a和b 使用一樣的xml-beans版本,或者,通過exclusions標簽切斷依賴的傳遞性, 控制end common lib中引入的xml-beans的版本。

https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html


三、怎么預防在類加載階段的錯誤

如果是沒有這個方法,編譯就通不過。編譯通過,在真正使用的時候出錯。這就需要對code寫好充分的unit test case,

並用testng framework ci工具,把unit test case組織成測試集,每次code change, 觸發對應的測試集進行回歸測試。


四、類加載相關的其他錯誤參照

https://fredal.xin/classloader-error


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM