记一次NoClassDefFoundError错误

本文详细介绍了Java中NoClassDefFoundError的含义,与ClassNotFoundException的区别,以及发生此错误的常见原因。重点讲解了排查此类错误的步骤,通过一个具体的例子展示了如何定位并解决jar包冲突导致的初始化类错误。最后分享了排查过程中的经验总结,以帮助开发者更好地应对类似问题。
摘要由CSDN通过智能技术生成

什么是NoClassDefFoundError?

       与ClassNotFoundException异常不同,虽然NoClassDefFoundError也可能是找不到目标类,但其也可能是再初始化加载目标类时出错了,这两种情况均会导致jvm抛出这个错误。
这是一个运行时错误,而ClassNotFoundException是一个编译时异常。相对于ClassNotFoundException而言,NoClassDefFoundError更难被排查。

什么时候发生?

发生NoclassDefFoundError通常有两种情况:

  1. 目标class或其所在的jar包不在运行时的classpath中,或者classpath在不同的类加载器加载时被覆盖了。总之,就是类加载器在寻找目标类时找不到了。
  2. 类加载器能够找到该类,但是在创建实例或调用该类时,初始化类成员过程出错。

如何排查?

程序日志出现了NoClassDefFoundError错误,要按以下步骤进行排查:

  1. 确定目标class所在的jar包。
  2. 检查jar包或war包的MANIFEST.MF文件,查看目标jar是否存在其Class-Path参数中。
  3. 仔细排查目标class,检查其所引入的类是否存在于其所对应的jar包中,排查jar包冲突或版本问题。

一次排查过程

最近在虚拟机上安装apache atlas过程中出现了NoClassDefFoundError错误,如下。

2020-10-29 11:55:03,718 WARN  - [main:] ~ Failed to obtain graph instance on attempt 1 of 3 (AtlasGraphP
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值