00:01
行啊,这个关于nes,咱们就说一些这些个基本操作啊。呃,然后呢,下边啊,我们来看一下这个价包冲突的这个问题。这个问题呢,是我们生产当中哈,很容易遇到的一个问题啊,那个首先说谁需要面对我们加班的冲突呢。呃,先给结论,就是编订依赖列表的程序,那么你想哈,如果说我们这个公司里边有成熟的依赖的列表,我们已经确认过没问题了,那就这里边儿就表就保证是没有问题的,保证是不会有冲突的啊,所以说呢,我们说实际开发的时候遇到冲突呀,可能是因为你在原有的公司已经成熟的依赖基础上呢,你需要倒一些新的依赖。啊,所以说这个时候,呃,但这种情况下应该说也并不是很多啊,特别是说我们想探索的时候,这个地方呢,这个部分你不是很确定。是吧,他才会,哎,这个时候有这样的问题啊,你需要在呃,在组组装啊,再去编定我们最初的依赖列表的过程当中,哎,得去有这个叫。
01:09
呃,不断的进行这个调整,包括要调整的内容呢,就包括解决这里边儿所有的架包的冲突,当然不排除还有一种情况,就是刚开始用的时候呢,还都挺好,呃,这个有些架包呢,有些功能我们还没用到,但是后来用到了以后,就发现它有冲突了啊,所以说这个,呃,这种这种这种问题吧,也是这个。阴阴魂不散啊,这个时不时的就会出来这个干扰我们,而且呢,这个架包冲突以后的表现形式呢。也很难,这个一概而论啊,你这个时候也很难说它一定是因为什么原因。啊呃,这个时候我们就是说呢,说一些个比较通常的情况吧。就是由于我们自己编写代码配置文件写错导致的问题。通常能够在异常信息中呢看到我们自己类的权利名或者配置文件的路径。
02:00
如果整个错误信息当中完全没有我们负责的部分,全部都是框架第三方工具里边的类的报错。这个时候就往往是的问题所引起的啊。哎嗯,更具体来说呢,就是总是体现为找不到力或者找不到方法,但是呢,也不是不是绝对的哈,不是绝对的。哎,嗯。比如说呢,我们会发现呢,有时候抛这个class note class note放异常。这个通常是指编译的时候找不到类,然后no class大夫呢,往往是运行的过程中呢,找不到类。啊linkage error呢,是不同类加载器啊,分别加载多个类有相同的权利名啊,它会有这个名字,这这个这个这个错误啊呃,所以说呢,你看啊。他俩都是error这个级别的,而他是exception这个级别的。啊,所以这个还是说有一定这个严重程度上有些区别,毕竟我们编译成编译的环节,编译的过程中如果能够发现的话,这个问题呢,可能还比较发现的比较早,还比较容易解决是吧,编译的时候都发现不了,不了运行的时候才能够发现这个问题,说明他还是这个隐藏的比较深的。
03:11
比如说这有这么一个例子啊,Http client,如果我们依赖http client这个价包里边有这么个类,叫做no op。什么host name verify啊,版本较低的就较低的版本里边没有,它较高的版本里边有诶。比如说4.3.6里边儿就没有,4.4里边就有。那么当我们确实需要用到这个类的时候啊,哎,看到民们通过依赖传递机制呢,是导致这个加班的。但是呢也呃呃看没呢,给我们引入了传递过来了,所以我们就没有明确声明对这个价包的依赖。可是呢,没问传递过来的是这个较低的版本里边其实并没有这个类是吧,那这会儿在运行的时候就会就会跑异常了,哎。
04:00
而冲突就体现在哪儿呢?这两个价包呢?这两个版本包都导进来了。啊,但是呢,假设咪们根据版本仲裁呢,采纳的是4.3.6啊对这个版本仲裁,其实我们前面已经说过了哈。哎,那你就说你以为有了,你以为会有这个类,但是其实并没有,甚至于说这个类呢,应该说也不是我们要用的啊,就是还是框架要用的,哎。再举一个例子呢,就是说他这个找不到方法的。呃,通常见于这个通过反射调用方法的这个情况啊,会导致这个no such method error啊,反射里边的这个这个这个错误。比如说呢,这个aunt al,姑且我们就这么叫吧,Aller有一个接口呢,叫做ast的,这个啊,还是个大写的。2.7.2里边没有,就是这个盖茨line方法啊,在2.7.2里边没有,2.7.6里边就有啊,所以这个时候你看你得倒是你得导的是这个版本才有,你要是这个版本就没有。
05:02
但是呢,还有一种情况啊,这种情况可能更更难以去排查。啊,就两个价包里边的类分别实现了同一个接口,本来是很正常的,但问题是没有注意命名规范啊,这两个不同的类恰巧呢是叫同一个名字,就是说这时候你看到它们在这个所在的包不一样啊,所在的包不一样,它们实现同一个接口。这个包和这个包按说呢,他们各自的来看。这个是没有问题的啊,你这个这个需要你仔细的去想一想啊,我们有一个架包外边的接口,这两个架包呢,分别都实现了这个接口。但是呢?这个A和B里边这个实线也有各自的实现,也也不一样,然后哈,这个时候他们偏巧呢,他们叫的权利名是一样的。一样的权利名,但是呢,这个里边的内容不一样。具体的代码不一样。
06:01
这个时候肯定会出问题对吧,我们要求呢,整个我们一个ma也好,是是Java也好,整个这个项目里边,或者说呢,就是我们准确说吧,是一个工程里边哈,权利名是类的这个唯一的标识啊,你这个两个类叫同一个权利名,这个肯定是啊,会撞车的。啊,所以说呢,这个事儿吧,嗯。看一下这个具体例子啊。实际工作中这个当中遇到过这样一个问题,项目中部分模块使用log for街打印日志,其他模块呢用的log back,呃,编译运行呢都不会冲突,但是会引起日志服务的降级啊,让你的log配置文件失效,比如说你指定的是error若级别啊,但是冲突呢,导致是info和debug什么的都在输出啊,底层的话呢,那基本上估计我们分析的话就是这样的一个原因。哎,这时候需要去排除掉一些个干扰的加班。
我来说两句