NoClassDefFoundError: Could not initialize class……

一、背景:在做一次应用更新发布的时候,应用发布完成,但是请求访问的时候报了NoClassDefFoundError异常,出现了如下错误:

 二、问题猜测及分析:

1、项目打包有问题或者打包不完整,导致缺少类文件,所以初始化加载失败:重新打包,并在本地验证没问题。但是更新到服务器以后,依然存在同样的问题。❌

2、通过“NoClassDefFoundError”关键字对日志文件进行筛查,发现存在其他异常信息,具体如下:

部分代码如下:

 注意⚠️:

  • 此处是Kotlin语言,companion object包裹的内容类似于Java中static
  • BankInterfaceUtils位于独立的jar包中,与PaymentTaskModel不在同一个jar包中

原因解析:IOC容器获取BankInterfaceUtils对象,但是由于本地的BankInterfaceUtils工具类的jar版本和服务器上面的jar版本不一致,所以加载实例失败,导致PaymentTaskModel无法访问(任何使用PaymentTaskModel的地方都会出现“NoClassDefFoundError”异常)

解决方法:更改服务器上面jar包的版本,使其与本地环境的版本一致

3、问题拓展:也可能是由于静态变量或静态块引起的异常,详细可参考:java.lang.NoClassDefFoundError: Could not initialize class xxx 原因及解决方法_轻松囧的博客-CSDN博客

三、总结:

遇到此类问题,可通过如下思路进行分析:

1、通过关键字“NoClassDefFoundError”或者“ExceptionInInitializerError”对日志进行筛查,找出问题的根源点。根据第一次加载时的错误日志,对代码进行核查分析。

2、检查本地环境与服务器环境所使用的外部jar包版本是否一致

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值