本申请涉及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冲突的方法。