.IncompatibleClassChangeError: Implementing class
1、問題截圖

2、問題代碼行

3、問題排查
a. 確定報錯信息表達的含義
“IncompatibleClassChangeError”不兼容的類,從描述看就是找不到或者找到的類不匹配

上圖是網上找到的相關問題解釋
b. 依據錯誤尋找解決方案
有了上述錯誤原因,可以指定排查方案。首先確認一下被加載類是不是真的存在,其次確認一下是不是真的加載錯了包。
c. 實操過程
直接在Idea中查找類名,是存在的所以第一個問題不是原因;在jvm參數中加入了-verbose:class準備看下是不是包沖突了,但是由于還沒有加載就報錯了,所以console輸出中也不能確定是否存在包沖突問題
d.網絡中找類似案例
在google中查看大家遇到類似的問題,總結一下有兩種情況。
1. 修改了某些jar包中的代碼,打包后為V1.1,但是項目中還在使用V1.0。這個時候因為 靜態類、靜態方法等改動導致類不可用。
2.項目中依賴了很多包,存在包沖突,加載的時候因為沒有找到合適的包而報錯。
e. 解決問題
通過上述案例,我分析當前遇到了包沖突的情況。理論上只要解決好包沖突即可
解決包沖突手段:安裝Maven Helper插件,就可以很輕松的找到沖突包。

進入包沖突界面發現有70多個包,其實我們并不需要解決所有的沖突,只需要找到和報錯相關類即可。例如在我遇到的場景中就僅僅處理完thrift相關即可。
排查完重新打包測試過了。
最終定位原因:jar包沖突
4. 參考文檔
a.https://www.homedt.net/111109.html
b.https://stackoverflow.com/questions/10474976/java-lang-incompatibleclasschangeerror-implementing-class-mongo

浙公網安備 33010602011771號