CN117389660A - 检测jar包同名类的方法和*** - Google Patents

检测jar包同名类的方法和*** Download PDF

Info

Publication number
CN117389660A
CN117389660A CN202311593796.1A CN202311593796A CN117389660A CN 117389660 A CN117389660 A CN 117389660A CN 202311593796 A CN202311593796 A CN 202311593796A CN 117389660 A CN117389660 A CN 117389660A
Authority
CN
China
Prior art keywords
class
byte code
code file
jar
service
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311593796.1A
Other languages
English (en)
Inventor
王文龙
王茹茹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
CITIC Aibank Corp Ltd
Original Assignee
CITIC Aibank Corp Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by CITIC Aibank Corp Ltd filed Critical CITIC Aibank Corp Ltd
Priority to CN202311593796.1A priority Critical patent/CN117389660A/zh
Publication of CN117389660A publication Critical patent/CN117389660A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

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

Description

检测jar包同名类的方法和***
技术领域
本发明涉及计算机技术领域,尤其涉及检测jar包同名类的方法和***。
背景技术
在Java应用程序中,jar包是一种常用的文件格式,它包含了Java类、资源文件和其他相关文件。然而,当多个jar包中存在同名类时,就可能会发生冲突,导致应用程序无法正常运行。jar包冲突的本质原因,是Java应用程序因某种因素,加载不到正确的类而导致其行为跟预期不一致。原因可以分为两类,一种跟构建相关,由于Maven的依赖传递原则,导致引入错误的jar包。另一种跟运行相关,对于在运行期间发生的jar包冲突现象,很多时候是由于JVM加载到不正确的同名类所导致的,因为JVM的类加载器默认一个类只能被加载一次,导致同名类不会再次被加载。当两个同名类具有不同的方法时,会导致服务在运行期间抛出java.lang.NoSuchMethodError异常,进而导致程序崩溃报错。
为解决上述问题,常用的解决方式是依赖maven构建工具中的maven-shade-plugin插件,它可以将一个项目的依赖打包进项目的最终的可执行jar文件中,还可以对依赖的jar包进行重命名,这样做的好处是用于类的隔离,可以减少依赖冲突问题的发生。但maven-shade-plugin插件只能对已经发现的同名类,在编译阶段对依赖的jar包进行重命名。由于一个项目可能会依赖很多jar包,各个jar包之间,可能也会存在很多同名类。但这些同名类并不都是业务代码所直接引用的,因此给检测扫描同名类代码带来了很大的困扰。
发明内容
为了解决上述背景技术中提到的至少一个问题,本发明提出一种检测jar包同名类的方法和***,通过过Java反编译工具,将字节码文件反编译源代码,从而获取业务代码引用的类,再进行扫描并分析出一个jar所包含的同名类,从而提取出业务代码所引用的同名类列表,为解决jar包冲突提供了一个有力的方法。
为实现以上目的,本发明所采用的技术方案包括:
一种检测jar包同名类方法,包括:
S1、获取jar包中包含业务的字节码文件;
S2、将所述字节码文件反编译为源代码文件,生成业务源代码文件;
S3、提取所述业务源代码文件中引用的类,生成第一类集合;
S4、循环遍历解析jar包中的全部字节码文件以及依赖的第三方jar包中的字节码文件;
S5、筛选出所述jar包中全部字节码文件以及依赖的第三方jar包中字节码文件中具有同名类特征的类,生成第二类集合;
S6、将所述第一类集合与第二类集合进行交叉对比,筛选出由业务代码引用的同名类,生成同名类列表;
S7、根据所述同名类列表,配置同名类白名单。
进一步地,所述S1之前还包括:通过CICD流水线,将git仓库里的源代码构建编译为jar包。
进一步地,所述提取所述源代码文件中引用的类包括:通过正则表达式提取所述源代码文件中引用的类。
进一步地,所述方法还包括:获取不存在于所述同名类白名单中且存在于同名类列表中的同名类,生成告警信息发送至用户,并在CICD流水线页面展示所述同名类列表。
本发明还涉及一种检测jar包同名类***,包括:
第一获取模块,用于获取jar包中包含业务的字节码文件;
反编译模块,用于将所述字节码文件反编译为源代码文件,生成业务源代码文件;
提取模块,用于提取所述业务源代码文件中引用的类,生成第一类集合;
遍历解析模块,用于循环遍历解析jar包中的全部字节码文件以及依赖的第三方jar包中的字节码文件;
筛选模块,用于筛选出所述jar包中全部字节码文件以及依赖的第三方jar包中字节码文件中具有同名类特征的类,生成第二类集合;
比对模块,用于将所述第一类集合与第二类集合进行交叉对比,筛选出由业务代码引用的同名类,生成同名类列表;
配置模块,用于根据所述同名类列表,配置同名类白名单。
本发明还涉及一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法。
本发明还涉及一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述的方法。
本发明还涉及一种计算机程序产品,包括计算机程序和/或指令,其特征在于,该计算机程序和/或指令被处理器执行时实现上述方法的步骤。
本发明的有益效果为:
1、可以快速、准确地检测出jar包中的同名类,避免了因同名类导致的应用程序异常。
2、可以自动生成告警信息,可以精确检测到哪些同名类是被业务代码所直接引用的,方便开发人员进行调试和修复。
3、可以在开发阶段发现同名类冲突,给开发人员及时告警通知,从而降低生产环境出现同名类jar包冲突问题,减少生产故障。
与maven-shade-plugin插件相比,本发明成果不需要依赖Maven构建工具,不需要依赖源代码进行编译。直接通过扫描jar分析字节码文件,就能获取项目里所依赖的同名类列表。
附图说明
图1为本发明检测jar包同名类方法流程示意图。
图2为本发明检测jar包同名类***结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,在本申请的描述中,除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
还应当理解,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。
需要注意的是,术语“S1”、“S2”等仅用于步骤的描述目的,并非特别指称次序或顺位的意思,亦非用以限定本申请,其仅仅是为了方便描述本申请的方法,而不能理解为指示步骤的先后顺序。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
Java虚拟机(英语:JavaVirtual Machine,缩写:JVM):是一种能够执行Java字节码的虚拟机,以堆栈结构机器来实现。最早由Sun微***所研发并实现第一个实现版本,是Java平台的一部分,能够执行以Java语言编写的软件程序。Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令***。JVM屏蔽了与具体操作***平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。通过对中央处理器(CPU)所执行的软件实现,实现能执行编译过的Java程序码(Applet与应用程序)。作为一种编程语言的虚拟机,实际上不只是专用于Java语言,只要生成的编译文件符合JVM对加载编译文件格式要求,任何语言都可以由JVM编译运行。
Apache Maven:是一个软件项目管理及自动构建工具,可用于构建和管理如Java、C#、Ruby、Scala和其他语言编写的项目。它包含了一个对象模型,一组标准集合,一个依赖管理***,和用来运行定义在生命周期阶段中插件目标和逻辑。
CICD,即Continuous Integrity,Continuous Delivery,ConsistentDeployment,持续集成、持续交付、持续部署。CI/CD是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。
本发明第一方面涉及一种步骤流程如图1所示的检测jar包同名类方法,包括:
S1、获取jar包中包含业务的字节码文件;
具体而言,在本申请实施例中,在S1之前,用户通过CICD(持续集成以及持续部署)流水线,将git仓库里的源代码构建编译为可执行程序jar包。
S2、将所述字节码文件反编译为源代码文件,生成业务源代码文件;
S3、提取所述业务源代码文件中引用的类,生成第一类集合;
具体而言,在本申请实施例中,将jar包里所包含业务的.class字节码文件,反编译成.java源代码文件,通过正则表达式提取出每个.java源码文件import引用的类,生成第一类集合。
S4、循环遍历解析jar包中的全部字节码文件以及依赖的第三方jar包中的字节码文件;
S5、筛选出所述jar包中全部字节码文件以及依赖的第三方jar包中字节码文件中具有同名类特征的类,生成第二类集合;
具体而言,在本申请实施例中,循环遍历解析jar包里所有的.class文件,及/lib目录下依赖的第三方jar包里的.class文件,筛选出具有同名类特征的class类,生成第二类集合。
S6、将所述第一类集合与第二类集合进行交叉对比,筛选出由业务代码引用的同名类,生成同名类列表;
具体而言,在本申请实施例中,将第一类集合(即每个.java源码文件import引用的类)与第二类集合(即S5中筛选出的同名class类)进行交叉对比,过滤出哪些同名类是被业务代码import直接引用的,生成同名类列表,将同名类列表存入数据库。
S7、根据所述同名类列表,配置同名类白名单。
具体而言,在本申请实施例中,结合S6中生成的同名类列表,新建同名类白名单配置。以方便开发人员根据项目情况,对同名类进行判断并处理。具体的,将筛选出的同名类列表,告知开发人员,允许开发人员根据自己的判断,对同名类进行处理。包括添加白名单进行跳过检测,或者查看项目源代码排查并解决同名类所导致的jar包冲突问题。
本发明另一方面还涉及检测jar包同名类***,其结构如图2所示,包括:
第一获取模块,用于获取jar包中包含业务的字节码文件;
反编译模块,用于将所述字节码文件反编译为源代码文件,生成业务源代码文件;
提取模块,用于提取所述业务源代码文件中引用的类,生成第一类集合;
遍历解析模块,用于循环遍历解析jar包中的全部字节码文件以及依赖的第三方jar包中的字节码文件;
筛选模块,用于筛选出所述jar包中全部字节码文件以及依赖的第三方jar包中字节码文件中具有同名类特征的类,生成第二类集合;
比对模块,用于将所述第一类集合与第二类集合进行交叉对比,筛选出由业务代码引用的同名类,生成同名类列表;
配置模块,用于根据所述同名类列表,配置同名类白名单。
通过使用该***,能够执行上述的运算处理方法并实现对应的技术效果。
本发明的实施例还提供能够实现上述实施例中的定时任务监控方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的定时任务监控方法的全部步骤。
本发明的实施例还提供一种用于执行上述方法的电子设备,作为该方法的实现装置,所述电子设备至少具备有处理器和存储器,特别是该存储器上存储有执行方法所需的数据和相关的计算机程序,并通过由处理器调用存储器中的数据、程序执行实现方法的全部步骤,并获得对应的技术效果。
优选的,该电子设备可以包含有总线架构,总线可以包括任意数量的互联的总线和桥,总线将包括由一个或多个处理器和存储器的各种电路链接在一起。总线还可以将诸如***设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和接收器和发送器之间提供接口。接收器和发送器可以是同一个元件,即收发机,提供用于在传输介质上与各种其他***通信的单元。处理器负责管理总线和通常的处理,而存储器可以被用于存储处理器在执行操作时所使用的数据。
额外的,所述电子设备还可以进一步包括通信模块、输入单元、音频处理器、显示器、电源等部件。其所采用的处理器(或称为控制器、操作控件)可以包括微处理器或其他处理器装置和/或逻辑装置,该处理器接收输入并控制电子设备的各个部件的操作;存储器可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种,可储存上述有关的数据信息,此外还可存储执行有关信息的程序,并且处理器可执行该存储器存储的该程序,以实现信息存储或处理等;输入单元用于向处理器提供输入,例如可以为按键或触摸输入装置;电源用于向电子设备提供电力;显示器用于进行图像和文字等显示对象的显示,例如可为LCD显示器。通信模块即为经由天线发送和接收信号的发送机/接收机。通信模块(发送机/接收机)耦合到处理器,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)还经由音频处理器耦合到扬声器和麦克风,以经由扬声器提供音频输出,并接收来自麦克风的音频输入,从而实现通常的电信功能。音频处理器可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器还耦合到中央处理器,从而使得可以通过麦克风能够在本机上录音,且使得可以通过扬声器来播放本机上存储的声音。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的***。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令***的制造品,该指令***实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
以上所述仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换等都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。

Claims (8)

1.一种检测jar包同名类方法,其特征在于,包括:
S1、获取jar包中包含业务的字节码文件;
S2、将所述字节码文件反编译为源代码文件,生成业务源代码文件;
S3、提取所述业务源代码文件中引用的类,生成第一类集合;
S4、循环遍历解析jar包中的全部字节码文件以及依赖的第三方jar包中的字节码文件;
S5、筛选出所述jar包中全部字节码文件以及依赖的第三方jar包中字节码文件中具有同名类特征的类,生成第二类集合;
S6、将所述第一类集合与第二类集合进行交叉对比,筛选出由业务代码引用的同名类,生成同名类列表;
S7、根据所述同名类列表,配置同名类白名单。
2.如权利要求1所述的方法,其特征在于,所述S1之前还包括:通过CICD流水线,将git仓库里的源代码构建编译为jar包。
3.如权利要求2所述的方法,其特征在于,所述提取所述源代码文件中引用的类包括:通过正则表达式提取所述源代码文件中引用的类。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:获取不存在于所述同名类白名单中且存在于同名类列表中的同名类,生成告警信息发送至用户,并在CICD流水线页面展示所述同名类列表。
5.一种检测jar包同名类***,其特征在于,包括:
第一获取模块,用于获取jar包中包含业务的字节码文件;
反编译模块,用于将所述字节码文件反编译为源代码文件,生成业务源代码文件;
提取模块,用于提取所述业务源代码文件中引用的类,生成第一类集合;
遍历解析模块,用于循环遍历解析jar包中的全部字节码文件以及依赖的第三方jar包中的字节码文件;
筛选模块,用于筛选出所述jar包中全部字节码文件以及依赖的第三方jar包中字节码文件中具有同名类特征的类,生成第二类集合;
比对模块,用于将所述第一类集合与第二类集合进行交叉对比,筛选出由业务代码引用的同名类,生成同名类列表;
配置模块,用于根据所述同名类列表,配置同名类白名单。
6.一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至4中任一项所述的方法。
7.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至4中任一项所述方法。
8.一种计算机程序产品,包括计算机程序和/或指令,其特征在于,该计算机程序和/或指令被处理器执行时实现权利要求1至4中任一项所述方法的步骤。
CN202311593796.1A 2023-11-27 2023-11-27 检测jar包同名类的方法和*** Pending CN117389660A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311593796.1A CN117389660A (zh) 2023-11-27 2023-11-27 检测jar包同名类的方法和***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311593796.1A CN117389660A (zh) 2023-11-27 2023-11-27 检测jar包同名类的方法和***

Publications (1)

Publication Number Publication Date
CN117389660A true CN117389660A (zh) 2024-01-12

Family

ID=89472093

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311593796.1A Pending CN117389660A (zh) 2023-11-27 2023-11-27 检测jar包同名类的方法和***

Country Status (1)

Country Link
CN (1) CN117389660A (zh)

Similar Documents

Publication Publication Date Title
CN110083360B (zh) 一种应用程序代码的编译方法、装置、设备及存储介质
CN110727581B (zh) 崩溃定位方法与电子设备
CN110333872B (zh) 一种应用的处理方法、装置、设备和介质
CN111158741A (zh) 监控业务模块对第三方类库依赖关系变化的方法及装置
CN109284222B (zh) 软件单元、数据处理***中的项目测试方法、装置及设备
CN114895935A (zh) 刷写车辆ecu的方法、装置、电子设备及存储介质
CN111596951A (zh) 一种工程文件的配置方法及装置
CN114356779A (zh) 编程语言调试方法、装置及终端设备
CN114253587A (zh) 应用程序更新方法、装置、电子设备及可读存储介质
CN111352631B (zh) 一种接口兼容性检测方法及装置
CN110990833B (zh) 一种sdk安全检测方法及相关设备
CN112905271A (zh) 一种应用程序接口api的调用方法、装置及电子设备
CN110334031B (zh) 内存分配代码检测方法、装置、计算机设备及存储介质
US20140359258A1 (en) Declarative Configuration Elements
CN115934156A (zh) Api接口版本自动匹配方法、装置、设备及存储介质
CN117389660A (zh) 检测jar包同名类的方法和***
CN106778270B (zh) 一种恶意应用程序的检测方法及***
CN113778451B (zh) 文件加载方法、装置、计算机***和计算机可读存储介质
US20150033213A1 (en) Compiling method, storage medium and compiling apparatus
CN112953721B (zh) 一种ipa文件的解析方法、装置、设备及存储介质
CN113721940A (zh) 一种软件部署方法、装置、电子设备及存储介质
CN108345461B (zh) 应用更新方法和装置以及计算机可读存储介质
CN117149645A (zh) 一种检测三方代码缺失方法及***
CN113672238B (zh) 基于实时操作***模块化管理的运行方法、装置及设备
KR101506656B1 (ko) 애플리케이션 품질 관리를 위한 시스템 및 그 방법

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination