问题描述
需求
需要将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