Jar包冲突问题(NoClassDefFoundError)

Jar包冲突问题(NoClassDefFoundError)

Scroll Down

## 问题出现详情

Caused by: java.lang.NoClassDefFoundError: org/apache/commons/compress/utils/InputStreamStatistics

在这里插入图片描述

思路

这类问题意思是没有找到响应的类。我的项目是maven来管理jar。所以先去maven里看一下到底怎么回事?

查找原因

在这里插入图片描述
可以看到,maven里有两个版本不一样的jar包。项目在使用maven的jar包时,有就近原则,会优先引用排序靠前的jar包。所以我们需要看下1.4.1中是否有我们的文件。

找到问题

在这里插入图片描述
果然,1.4.1中没有我们需要的/InputStreamStatistics这个类。
在这里插入图片描述
而在1.19版本 中,文件存在。
所以目前的思路查找1.4.1版本是被谁引用的,然后去除1.4.1版本的jar包,然后测试一下看看。

查找根源

在这里插入图片描述

我用的是idea,在maven 的 1.4.1版本jar上点击右键,然后按红色箭头处。
在这里插入图片描述

再依次按照图中点击
在这里插入图片描述
发现是在这两个maven项目中有引用。
在这里插入图片描述

右侧点击maven
在这里插入图片描述
选择admin 这个maven项目点击箭头处
在这里插入图片描述
在这里插入图片描述

ctrl+f 搜索
compress
果然,有两个相同名字的包。
在这里插入图片描述

先选择其中一个,让后双击名字。
在这里插入图片描述
看来不是,这是引用的1.19版本的
在这里插入图片描述

选择另外一个,并注释掉pom,然后刷新maven
在这里插入图片描述
这就 只剩一个了,也完美运行程序了。

原因总结

本次原因是因为,yarn-common包中含有compress文件。
同时,我的poi包中也有compress文件,导致程序在使用jar包时,优先选择了排序靠前的jar文件,即选择了yarn-common包中compress文件,但是我要使用poi的话,compress文件中缺少我需要的类,所以poi运行报错。最后我去掉了yarn-common中的compress文件,测试后结果还是完美运行的。