一次java.lang.NoClassDefFoundError的排查过程

18 篇文章 1 订阅

最近项目的各类jar包依赖版本都进行了升级,然后测试环境出现一个很诡异的问题,所以记录一下排查过程。

问题出现

在某些部署完成后,使用了hutool的DigestUtil类的相关接口会报错,错误如下:

java.lang.NoClassDefFoundError:Could not initialize class cn.hutool.crypto.GlobalBouncyCastleProvider

java.lang.NoClassDefFoundError

然后从这个错误开始排查,发现这个包里的确有这个类,通过查询资料,猜测是静态变量加载失败,但是不明白为什么会失败。然后经过一系列查询和验证,有篇文章说NoClassDefFoundError经常伴随ExceptionInInitializerError异常。

java.lang.ExceptionInInitializerError

然后在另一个环境,部署完成后,发现第一次调用和第二次调用抛出的异常不一样,第一次抛异常是ExceptionInInitializerError,第二次开始才会抛出NoClassDefFoundError,并且找到了一篇相关介绍文章:怎么解决java.lang.NoClassDefFoundError错误
然后看到这里脑子短路了,虽然现在的确知道是因为初始化失败了,但是为啥呢?

signer information does not match signer information of other classes in the same package

继续观察我的错误日志,没有头绪的时候突然福至心灵,一般错误都会有错误原因啊,继续往下翻ExceptionInInitializerError下面的另一个caused by果然明晃晃写着原因:

Caused by: java.lang.SecurityException: class "org.bouncycastle.jcajce.provider.symmetric.IDEA$Mappings"'s signer information does not match signer information of other classes in the same package
	at java.lang.ClassLoader.checkCerts(ClassLoader.java:955) ~[na:1.7.0_191]
	at java.lang.ClassLoader.preDefineClass(ClassLoader.java:669) ~[na:1.7.0_191]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:797) ~[na:1.7.0_191]

好的,有方向就可以继续查,然后查到这个报错是因为:
SecurityException

然后去程序里查看,果然有两个版本的bouncycastle存在,排除掉其中一个。问题解决

参考

深入JVM分析spring-boot应用hibernate-validator NoClassDefFoundError

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盖丽男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值