记一次由jar包冲突引起的异常--Java.Lang.NoSuchMethodError

本文记录了一次由于jar包冲突导致的Java Lang NoSuchMethodError异常。在尝试将svg转换为pdf时,出现了错误信息,指出缺少SimpelLog类的setLevel(int)方法。通过检查pom文件,排除多余jar包,并使用Eclipse进行编译,最终发现commons-discover包中的错误类,通过排除该包解决问题。
摘要由CSDN通过智能技术生成

问题描述

需求

需要将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>标签排除(但是依然报错,接着往下走)

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTM4MTg2Mw==,size_16,color_FFFFFF,t_70

2、ctrl+shift+t-->搜索错误日志中的类(这里是SimpleLog)

20190509170753384.png

接下来会匹配所有有该方法的jar包。

果然,在一个commons-discover的包中,找到了一个包名+类名完全一样的SimpleLog...里面的方法也一模一样(java就是按照包名+类名组成的完全限定类名去定位一个类的)。说明就是maven在对项目打包的时候仲裁了一个不匹配的类。

然后同样利用<exclusions>标签排除。

再打包运行项目,完美解决。


这里有一篇不错的,jar包冲突原因分析。

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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值