一种识别class冲突的方法、装置、电子设备及存储介质与流程

文档序号:35674302发布日期:2023-10-08 02:00阅读:28来源:国知局
一种识别class冲突的方法、装置、电子设备及存储介质与流程

本申请涉及class文件冲突识别,具体涉及一种识别class冲突的方法、装置、电子设备及存储介质。


背景技术:

1、在java项目的第三方依赖包升个级过程中,不同的jar包可能存在相同的class、iava的父类委托加载机制,在带来巨大便利性和效率提升的同时也带来不少麻烦,最直接的就是类冲突造成的问题,包括:

2、1、造成的注入系统混乱;

3、2、造成类型判断系统混乱,例如if(paramobject instanceof classs)判断失灵;

4、3、不同版本class实现方法有升级,例如ajar包支持getxx(a,b),而另外jar中却只有getxx(a);

5、4、数据在运算中的神秘失踪,如方法ajar中有方法void a(bb),c包中调用a的方法传入的对象b和ajar中的b加载的是有类冲突的b,导致运算结果出现问题。

6、传统处理方式通过使用maven插件的方式排除掉相同的jar包,解决不同的版本在同一个项目中被引用引起的冲突,但是对于不同的jar包,可能存在的class冲突并没有很好的解决办法,只有等到程序运行,调用到class后,出现相关异常时,再根据异常排查相关class冲突。


技术实现思路

1、鉴于以上所述现有技术的缺点,本发明提供一种识别class冲突的方法,以解决上述技术问题。

2、本发明提供的一种识别class冲突的方法,包括:

3、获取项目源码,将所述项目源码构建为目标项目jar包;

4、创建java探针项目;

5、将所述java探针项目构建为探针jar包;

6、运行所述目标项目jar包,所述探针jar包同时启动;

7、所述java探针项目记录所述目标项目jar包启动时加载的class文件的class信息,并将所述class信息添加到class加载列表;

8、遍历所述class加载列表中的所述class信息,基于所述class信息判断所述加载的class文件是否冲突;

9、生成class冲突列表。

10、于本申请一示例性实施例中,所述方法包括:

11、获取云端历史class冲突列表;

12、将本次所述class冲突列表与所述历史class冲突列表进行比对;

13、当本次所述class冲突列表与所述历史class冲突列表相同时,确定所述历史class冲突列表项目的线上运行时间和所述历史class冲突列表项目的异常产生记录;

14、若所述历史class冲突列表项目的线上运行时间大于等于预设阈值,且所述历史class冲突列表项目的异常产生记录表征所述历史class冲突列表项目在运行时无异常产生,则标注为历史存在的低风险低优先级列表。

15、于本申请一示例性实施例中,所述方法包括:若本次所述class冲突列表与所述历史class冲突列表不相同时,将本次所述class冲突列表标注为历史版本不存在的高风险高优先级处理列表。

16、于本申请一示例性实施例中,所述方法包括:将本次所述class冲突列表写入云端。

17、于本申请一示例性实施例中,所述class信息包括class文件路径信息。

18、于本申请一示例性实施例中,遍历所述class加载列表中的class信息,基于所述class信息判断加载的class文件是否冲突,包括:

19、基于所述class文件路径信息提取所述加载的class文件的名称和所述加载的class文件的依赖包名称;

20、基于每个所述加载的class文件的名称和所述加载的class文件的依赖包名称,判断所述加载的class文件是否重复;

21、当所述加载的class文件的名称和所述加载的class文件的依赖包名称分别与其他所述加载的class文件的名称和所述加载的class文件的依赖包名称相同时,确定所述加载的class文件重复。

22、于本申请一示例性实施例中,基于所述class文件路径信息提取所述加载的class文件的名称和所述加载的class文件的依赖包名称,包括:

23、查询所述class文件路径信息中的最后一个路径表示符号,并截取所述class文件路径信息中的最后一个路径表示符号之后的首个信息,以作为所述加载的class文件的名称;

24、查询所述class文件路径信息中的倒数第二个路径表示符号;

25、截取所述class文件路径信息中的最后一个路径表示符号,与所述class文件路径信息中的倒数第二个路径表示符号之间的信息,以作为所述加载的class文件的依赖包名称。

26、本申请还提供一种识别class冲突的装置,所述装置包括:构建模块,用于获取项目源码,并将项目源码构建为目标项目jar包;创建模块,用于创建java探针项目,并将java探针项目构建为探针jar包;运行模块,用于运行所述目标项目jar包,并同时启动探针jar包;记录模块,用于记录所述目标项目jar包启动时加载的class文件的class信息,并将所述class信息添加到class加载列表;判断模块,用于遍历所述class加载列表中的所述class信息,基于所述class信息判断所述加载的class文件是否冲突。

27、本申请还提供一种电子设备,所述电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述电子设备实现如上述任一项所述的识别class冲突的方法。

28、本申请还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序被计算机的处理器执行时,使计算机执行上述任一项所述的识别class冲突的方法。

29、与现有技术相比,本发明的有益效果在于:

30、现有的处理方法,对于不同的jar包,可能存在的class冲突没有很好的识别、解决办法。本申请通过创建java探针项目,在目标项目jar包启动时,探针jar包同时启动,java探针项目记录目标项目jar包启动时加载的class文件的class信息,通过对加载的class文件的class信息进行判断,从而可以有效的判断目标项目jar包启动加载过程中,是否存在class文件冲突,有效的识别不同jar包可能存在的class冲突,从而确定出项目是否存在class冲突风险。

31、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。



技术特征:

1.一种识别class冲突的方法,其特征在于,所述方法包括:

2.根据权利要求1所述的识别class冲突的方法,其特征在于,所述方法包括:

3.根据权利要求2所述的识别class冲突的方法,其特征在于,所述方法包括:

4.根据权利要求3所述的识别class冲突的方法,其特征在于,所述方法包括:

5.根据权利要求1所述的识别class冲突的方法,其特征在于,所述class信息包括class文件路径信息。

6.根据权利要求5所述的识别class冲突的方法,其特征在于,遍历所述class加载列表中的class信息,基于所述class信息判断加载的class文件是否冲突,包括:

7.根据权利要求6所述的识别class冲突的方法,其特征在于,基于所述class文件路径信息提取所述加载的class文件的名称和所述加载的class文件的依赖包名称,包括:

8.一种识别class冲突的装置,其特征在于,所述装置包括:

9.一种电子设备,其特征在于,所述电子设备包括:

10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,当所述计算机程序被计算机的处理器执行时,使计算机执行权利要求1至7中任一项所述的识别class冲突的方法。


技术总结
本发明提供一种识别class冲突的方法、装置、电子设备及存储介质,涉及class文件冲突识别技术领域。一种识别class冲突的方法包括:获取项目源码,将项目源码构建为目标项目jar包;创建java探针项目;将java探针项目构建为探针jar包;运行目标项目jar包,探针jar包同时启动;java探针项目记录目标项目jar包启动时加载的class文件的class信息,并将class信息添加到class加载列表;遍历class加载列表中的class信息,基于class信息判断加载的class文件是否冲突;生成class冲突列表。本发明通过对加载的class文件的class信息进行判断,从而可以有效的判断目标项目jar包启动加载过程中,是否存在class文件冲突,有效的识别不同jar包可能存在的class冲突,从而确定出项目是否存在class冲突风险。

技术研发人员:方海波,黄勇
受保护的技术使用者:浙江极氪智能科技有限公司
技术研发日:
技术公布日:2024/1/15
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1