問題描述
需求
需要將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包衝突原因分析。