java.lang.NoClassDefFoundError: org/apache/commons/lang/text/StrLookup解决过程

本文详细解析了java.lang.NoClassDefFoundError与java.lang.ClassNotFoundException的区别,分享了一次解决NoClassDefFoundError异常的实际经验,特别是针对org.apache.commons.lang.text.StrLookup类未找到的问题,揭示了公司私仓中jar包路径不匹配导致的运行时错误,并提供了解决方案。

前言:

今天在拉新项目后启动时出现如下异常:

java.lang.NoClassDefFoundError: org/apache/commons/lang/text/StrLookup

首先

先搞清楚java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError的主要区别

ClassNotFoundExceptionNoClassDefFoundError
发生在JVM动态运行时发生在编译时

NoClassDefFoundError发生在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.NoClassDefFoundError的错误,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误。ClassNotFoundException比NoClassDefFoundError容易解决,是因为在编译时我们就知道错误发生,并且完全是由于环境的问题导致。


网上诸多方法均是说没有commons-lang的pom依赖,没有其他解决方式。如果是由于该原因的话,那么在编译工程就会报ClassNotFoundException异常而不是NoClassDefFoundError。

而后又怀疑是否是包冲突,导致在运行时想调用这个类的方法或者访问这个类的静态成员的时候不知道调用哪一个。排除后发现非此原因。

最后解压出commons-lang-2.6.jar,发现其中的包路径不是org\apache\commons\lang\,WTF?直接导致运行时使用该jar包下某个类时根据路径找不到。出现这个的原因是在公司私仓这个包被替换咯,我又把它拉下来了。。。

最后把正确的jar包替换后成功解决。

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值