你是如何快速定位解决jar冲突的-基于idea的Maven Helper排查

265 阅读1分钟

今天遇到一个问题,是jar包冲突引起的,将过程记录一下。

f46aeb04da0a2e934c3eec586443597b.jpg

问题如下:

class “org.bouncycastle.asn1.ASN1Object”'s signer information does not match signer information of other classes in the same package

解决方法:

1.查看报错信息

java.lang.SecurityException: class "org.bouncycastle.asn1.ASN1Object"'s signer information does not match signer information of other classes in the same package
	at java.lang.ClassLoader.checkCerts(ClassLoader.java:898) ~[na:1.8.0_171]
	at java.lang.ClassLoader.preDefineClass(ClassLoader.java:668) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:761) ~[na:1.8.0_171]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_171]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_171]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_171]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_171]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_171]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_171]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_171]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_171]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_171]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_171]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_171]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_171]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_171]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_171]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_171]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_171]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_171]
	at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_171]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_171]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) ~[na:1.8.0_171]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_171]
	at org.bouncycastle.asn1.gm.GMObjectIdentifiers.<clinit>(Unknown Source) ~[bcprov-jdk15on-1.69.jar:1.69.0]
	at org.bouncycastle.asn1.gm.GMNamedCurves.<clinit>(Unknown Source) ~[bcprov-jdk15on-1.69.jar:1.69.0]
	at cn.hutool.crypto.SmUtil.<clinit>(SmUtil.java:54) ~[hutool-all-5.8.12.jar:na]

这个错误很明显是jar冲突引起的了

根据ASN1Object寻找所在jar

使用idea,双击shift,搜索所属的jar

image.png

定位冲突的jar

问题找到了,那怎么定位是哪两个jar冲突呢。这里可能每个人方法不一样:

1.有的是拿着错误,去百度、google搜索一下,看其他人的处理方法,刚好一模一样还好,大部分情况可能是,大家遇 到的错误一样,但是各自冲突的jar是不一样的,还是不能定位。

2.有的比较熟悉,凭经验去尝试

这里我推荐下我用的方法,是基于idea的一个插件:

image.png

安装之后,到自己工程的pom,通过错误分析,找到关键字,进行搜索

image.png

解决

到这里,我们就找到冲突的jar了。

大家可以根据实际情况,采用exclusion,或者没有引用的话,进行删除。

到这里,问题就解决了,重新加载maven后,然后继续测试就可以了。