System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及计算机,尤其涉及检测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包之间,可能也会存在很多同名类。但这些同名类并不都是业务代码所直接引用的,因此给检测扫描同名类代码带来了很大的困扰。
技术实现思路
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.一种检测jar包同名类方法,其特征在于,包括:
2.如权利要求1所述的方法,其特征在于,所述s1之前还包括:通过cicd流水线,将git仓库里的源代码构建编译为jar包。
3.如权利要求2所述的方法,其特征在于,所述提取所述源代码文件中引用的类包括:通过正则表达式提取所述源代码文件中引用的类。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:获取不存在于所述同名类白名单中且存在于同名类列表中的同名类,生成告警信息发送至用户,并在cicd流水线页面展示所述同名类列表。
5...
【专利技术属性】
技术研发人员:王文龙,王茹茹,
申请(专利权)人:中信百信银行股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。