类加载分析方案以及预防办法

本文探讨了Java类加载过程中可能出现的版本冲突问题,分析了不同机器上类加载顺序不一致导致的问题,并提出了通过Maven工具进行依赖分析、在应用启动时使用-verbose参数进行监控以及在编译阶段预警冲突的解决方案。详细介绍了如何利用mvn dependency:list、mvn dependency:tree和mvn dependency:analyzer等工具进行依赖管理和排查。
摘要由CSDN通过智能技术生成

java类加载中的版本冲突是一个头疼的问题,这里列举几种排查问题以及处理的常用办法

 

有时候在测试环境下正常的,线上部分机器也是正常,但是有一些机器就会异常,这是啥原因?

因为jar包的加载顺序在不同的机器上面是不同的,一台机器多次重启,基本的顺序不会变,但是新的jar包就会有问题

 

 

在不同的机器上,对jar包中类的加载顺序有时候不是完全一致的,例如,在/home/admin/.default/lib 目录下的有个A.jar和b.jar,里面都有个叫SayHello的class,但A的SayHello里的功能(例如他打印的是“去你的”)和b的SayHello功能(例如他打印的是“你好”)不一样,

由于不同机器加载顺序可能不一致,那么就有可能A机器上先加载了A.jar的SayHello类(会打印出“去你的”),而B机器上加载了b.jar的SayHello类(会打印出“你好”)。

 

 

这个问题在特定的机器上,其加载顺序基本不变的,因此,一旦测试的时候没问题,那他就很难再重现出此问题,只有部署到线上多台机器上时,问题才可能会暴露出来。

 

 

 

(1)通过maven自带的几个工具来进行分析

 

 

1、mvn dependency:list能够列举出项目中的依赖情况

2、mvn dependency:tree打印出依赖出(\-代表行尾)  这个在排除依赖的时候非常有用,通过树状结构来查看jar包的加载情况

3、mvn dependency:analyzer 这个能够分析项目中的依赖情况。

 

Used undeclared dependencies 是指那些在项目中直接使用到的,但没有在POM中配置的依赖。要注意一点,这个分析是编译主代码和测试代码需要的依赖,运行时需

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值