ClassNotFoundException、NoSuchMethodException?

背景/吐槽:公司的云平台架构部门提供了一个spark链接hbase的工具包,但是其中包含的依赖太多太多,对外提供的jar包一个包居然接近90M,然后引用进来之后问题就很容易一不小心就和本地自己依赖的jar包产生冲突,真的是坑嗷,由此也告诫自己以后自己如果对外提供服务jar包,一定要尽量去除不用的jar包,该设置scope为provided的设置provided,能shade的尽量学习flink官方jar包一样进行shade方式打包,尽量确保自己的jar中的依赖不对使用方造成影响。

解决办法:

Step1. 先看是哪个类提示未找到,然后找到这个类所属的jar包,如果确实是jar包不存在,则添加对应依赖,如果jar包存在,则说明应该是项目依赖多个版本的包导致的问题,如何找到哪些包依赖了这个包呢?

Step2. 我们项目的依赖是hadoop-common中的Configuration类报错的,查找发现jar包不存在,则直接加上对应依赖,继续执行发现还是提示ClassNotFoundException

Step3. 此时项目中确实只引入了这一个版本的hadoop-common包,如何判断项目中其它依赖的jar包是否有间接引入这个jar包呢?个人比较喜欢的方式是通过mvn dependency:tree >> dep.log的方式,在项目根目录下执行该命令把项目依赖分析全部写入到文本中,然后在文本中进行搜索对应依赖,判断有哪些jar包引入了对应类。

如上执行完毕后,发现确实只有我们这一个包的情况下还是提示异常,则想到大概率是flink官方jar包对hadoop版本有要求,这个时候去网上查也查不到,看flink对应jar包也没找到,不过还好我这边是拷贝的之前代码,之前项目代码运行是正常的,到这个新项目中运行异常,那么可以对之前项目执行mvn dependency:tree进行分析,看项目中对应引入的hadoop-common版本为2.8.2,而我们自己新项目中引入jar包的时候是随便引入的,引得jar包是3.1.0的,判断很有可能是版本过高,然后把版本设置为2.8.2后运行正常,由此运行应用成功~

下午一直被这个问题卡住好一会儿,之前只知道用IDEA自带的Diagrams->Show Dependecies,但是由于坑爹的公司提供的jar包依赖的包太多太多,加上自己项目的依赖,导致生成的依赖图完全无法看,依赖过多了生成的很慢,而且会有点卡,生成了之后密密麻麻的依赖根本看不清,即便设置完大小后也无法拖动,当然也可能是我使用方式不对? 经过这次排查,算是对maven此类问题有种豁然开朗的感觉,下次再遇到此类问题排查思路算是有了哈~ 妈妈再也不用担心我的各种依赖冲突了~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值