System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 检测jar包同名类的方法和系统技术方案_技高网

检测jar包同名类的方法和系统技术方案

技术编号:40129654 阅读:3 留言:0更新日期:2024-01-23 21:56
本发明专利技术涉及检测jar包同名类的方法和系统,包括获取jar包中包含业务的字节码文件;将字节码文件反编译为源代码文件,生成业务源代码文件;提取业务源代码文件中引用的类,生成第一类集合;循环遍历解析jar包中的全部字节码文件以及依赖的第三方jar包中的字节码文件;筛选出jar包中全部字节码文件以及依赖的第三方jar包中字节码文件中具有同名类特征的类,生成第二类集合;将第一类集合与第二类集合进行交叉对比,筛选出由业务代码引用的同名类,生成同名类列表;根据同名类列表,配置同名类白名单。本发明专利技术无需依赖Maven构建工具,无需依赖源代码进行编译。通过扫描jar包分析字节码文件,获取项目里所依赖的同名类列表,解决同名类所导致的jar包冲突问题。

【技术实现步骤摘要】

本专利技术涉及计算机,尤其涉及检测jar包同名类的方法和系统


技术介绍

1、在java应用程序中,jar包是一种常用的文件格式,它包含了java类、资源文件和其他相关文件。然而,当多个jar包中存在同名类时,就可能会发生冲突,导致应用程序无法正常运行。jar包冲突的本质原因,是java应用程序因某种因素,加载不到正确的类而导致其行为跟预期不一致。原因可以分为两类,一种跟构建相关,由于maven的依赖传递原则,导致引入错误的jar包。另一种跟运行相关,对于在运行期间发生的jar包冲突现象,很多时候是由于jvm加载到不正确的同名类所导致的,因为jvm的类加载器默认一个类只能被加载一次,导致同名类不会再次被加载。当两个同名类具有不同的方法时,会导致服务在运行期间抛出java.lang.nosuchmethoderror异常,进而导致程序崩溃报错。

2、为解决上述问题,常用的解决方式是依赖maven构建工具中的maven-shade-plugin插件,它可以将一个项目的依赖打包进项目的最终的可执行jar文件中,还可以对依赖的jar包进行重命名,这样做的好处是用于类的隔离,可以减少依赖冲突问题的发生。但maven-shade-plugin插件只能对已经发现的同名类,在编译阶段对依赖的jar包进行重命名。由于一个项目可能会依赖很多jar包,各个jar包之间,可能也会存在很多同名类。但这些同名类并不都是业务代码所直接引用的,因此给检测扫描同名类代码带来了很大的困扰。


技术实现思路

1、为了解决上述
技术介绍
中提到的至少一个问题,本专利技术提出一种检测jar包同名类的方法和系统,通过过java反编译工具,将字节码文件反编译源代码,从而获取业务代码引用的类,再进行扫描并分析出一个jar所包含的同名类,从而提取出业务代码所引用的同名类列表,为解决jar包冲突提供了一个有力的方法。

2、为实现以上目的,本专利技术所采用的技术方案包括:

3、一种检测jar包同名类方法,包括:

4、s1、获取jar包中包含业务的字节码文件;

5、s2、将所述字节码文件反编译为源代码文件,生成业务源代码文件;

6、s3、提取所述业务源代码文件中引用的类,生成第一类集合;

7、s4、循环遍历解析jar包中的全部字节码文件以及依赖的第三方jar包中的字节码文件;

8、s5、筛选出所述jar包中全部字节码文件以及依赖的第三方jar包中字节码文件中具有同名类特征的类,生成第二类集合;

9、s6、将所述第一类集合与第二类集合进行交叉对比,筛选出由业务代码引用的同名类,生成同名类列表;

10、s7、根据所述同名类列表,配置同名类白名单。

11、进一步地,所述s1之前还包括:通过cicd流水线,将git仓库里的源代码构建编译为jar包。

12、进一步地,所述提取所述源代码文件中引用的类包括:通过正则表达式提取所述源代码文件中引用的类。

13、进一步地,所述方法还包括:获取不存在于所述同名类白名单中且存在于同名类列表中的同名类,生成告警信息发送至用户,并在cicd流水线页面展示所述同名类列表。

14、本专利技术还涉及一种检测jar包同名类系统,包括:

15、第一获取模块,用于获取jar包中包含业务的字节码文件;

16、反编译模块,用于将所述字节码文件反编译为源代码文件,生成业务源代码文件;

17、提取模块,用于提取所述业务源代码文件中引用的类,生成第一类集合;

18、遍历解析模块,用于循环遍历解析jar包中的全部字节码文件以及依赖的第三方jar包中的字节码文件;

19、筛选模块,用于筛选出所述jar包中全部字节码文件以及依赖的第三方jar包中字节码文件中具有同名类特征的类,生成第二类集合;

20、比对模块,用于将所述第一类集合与第二类集合进行交叉对比,筛选出由业务代码引用的同名类,生成同名类列表;

21、配置模块,用于根据所述同名类列表,配置同名类白名单。

22、本专利技术还涉及一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法。

23、本专利技术还涉及一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述的方法。

24、本专利技术还涉及一种计算机程序产品,包括计算机程序和/或指令,其特征在于,该计算机程序和/或指令被处理器执行时实现上述方法的步骤。

25、本专利技术的有益效果为:

26、1、可以快速、准确地检测出jar包中的同名类,避免了因同名类导致的应用程序异常。

27、2、可以自动生成告警信息,可以精确检测到哪些同名类是被业务代码所直接引用的,方便开发人员进行调试和修复。

28、3、可以在开发阶段发现同名类冲突,给开发人员及时告警通知,从而降低生产环境出现同名类jar包冲突问题,减少生产故障。

29、与maven-shade-plugin插件相比,本专利技术成果不需要依赖maven构建工具,不需要依赖源代码进行编译。直接通过扫描jar分析字节码文件,就能获取项目里所依赖的同名类列表。

本文档来自技高网...

【技术保护点】

1.一种检测jar包同名类方法,其特征在于,包括:

2.如权利要求1所述的方法,其特征在于,所述S1之前还包括:通过CICD流水线,将git仓库里的源代码构建编译为jar包。

3.如权利要求2所述的方法,其特征在于,所述提取所述源代码文件中引用的类包括:通过正则表达式提取所述源代码文件中引用的类。

4.如权利要求1所述的方法,其特征在于,所述方法还包括:获取不存在于所述同名类白名单中且存在于同名类列表中的同名类,生成告警信息发送至用户,并在CICD流水线页面展示所述同名类列表。

5.一种检测jar包同名类系统,其特征在于,包括:

6.一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至4中任一项所述的方法。

7.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至4中任一项所述方法。

8.一种计算机程序产品,包括计算机程序和/或指令,其特征在于,该计算机程序和/或指令被处理器执行时实现权利要求1至4中任一项所述方法的步骤。

...

【技术特征摘要】

1.一种检测jar包同名类方法,其特征在于,包括:

2.如权利要求1所述的方法,其特征在于,所述s1之前还包括:通过cicd流水线,将git仓库里的源代码构建编译为jar包。

3.如权利要求2所述的方法,其特征在于,所述提取所述源代码文件中引用的类包括:通过正则表达式提取所述源代码文件中引用的类。

4.如权利要求1所述的方法,其特征在于,所述方法还包括:获取不存在于所述同名类白名单中且存在于同名类列表中的同名类,生成告警信息发送至用户,并在cicd流水线页面展示所述同名类列表。

5...

【专利技术属性】
技术研发人员:王文龙王茹茹
申请(专利权)人:中信百信银行股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1