记一次由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

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