記一次由jar包衝突引起的異常--Java.Lang.NoSuchMethodError

問題描述

需求

需要將svg文件轉爲pdf文件,引用了batik jar包。

異常

在運行的時候就出現以下異常信息:

java.lang.NoSuchMethodError: ....commons-logging....SimpleLog.setLevel(int)....

大致就是:沒有SimpelLog類中setLevel(int)方法(明明有commons-logging的jar包的,首先排除是否真的沒有當前方法)。首先想到的就是jar包衝突了,maven打包項目的時候仲裁了一個錯誤的類。

常見的jar包衝突引起的異常

java.lang.ClassNotFoundException

java.lang.NoSuchMethodError

java.lang.NoClassDefFoundError

java.lang.LinkageError等

問題解決

依賴eclipse編譯工具解決

1、從pom文件中找到多餘的jar包,用<exclusions>標籤排除(但是依然報錯,接着往下走)

2、ctrl+shift+t-->搜索錯誤日誌中的類(這裏是SimpleLog)

接下來會匹配所有有該方法的jar包。

果然,在一個commons-discover的包中,找到了一個包名+類名完全一樣的SimpleLog...裏面的方法也一模一樣(java就是按照包名+類名組成的完全限定類名去定位一個類的)。說明就是maven在對項目打包的時候仲裁了一個不匹配的類。

然後同樣利用<exclusions>標籤排除。

再打包運行項目,完美解決。


這裏有一篇不錯的,jar包衝突原因分析。

鏈接:https://www.jianshu.com/p/100439269148

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章