關於jar包衝突

  此次在項目開發中遇到了java.lang.NoSuchMethodError。堆棧信息顯示的是JsonArray.toJavaList這個方法,這個方法在別的分支上並不會報錯。根據往常的經驗,猜想多是我這個分支新引入的包依賴了舊版本的fastJson包。java

     先是在打包運行module的pom中找到傳遞依賴,mvn dependency:tree -Dverbose -Dincludes=com.alibaba:fastjson。這邊顯示com.alibaba:fastjson顯示的同一個版本。json

     其實這一步是沒有必要的,由於我以前已經在父pom中申明瞭com.alibaba:fastjson的版本,因此maven不會錯誤地選擇版本。jvm

     而後在idea搜索了JsonArray這個類,也沒有發現其餘包中有類全限定名徹底同樣的JsonArray類。maven

     看來只能用bebug,用java.lang.Class.getProtectionDomain方法查出了jvm確實加載了其餘Jar包下的JsonArray。找到jar包,可是判斷不出是哪一個依賴,此時能夠用maven-enforcer-plugin插件。ide

     這裏也能夠在ClassLoader類的loadClass打個條件斷點 ,也能找到對應的依賴。idea

     最後總結一下,jar包衝突狀況解決思路以下:spa

     一、同一個jar包出現了不一樣的版本,直接在依賴管理中申明版本插件

     二、若是第一招解決不了的話,多是同一個類出如今多個不一樣的jar包中。這個時候在idea中搜索,搜不到就debug ClassLoader類。debug

相關文章
相關標籤/搜索