一种Jar包重组方法、装置及电子设备与流程

    技术2025-06-30  9


    本发明涉及计算机,尤其涉及一种jar包重组方法、装置及电子设备。


    背景技术:

    1、jar(java archive)包,是java中的一种压缩包,其中压缩有若干业务模块所需要使用的类文件,即class文件,所以,jar包被认为是class文件的集合。jar包能够被业务模块直接使用,在开发业务模块时,利用已有的jar包可以提高开发效率。

    2、在一个java应用系统中,会将应用系统不同业务模块所需要的jar包存储在同一个类存储目录下(如数据库管理系统,管理不同数据库的模块所需要的jar包都会存储在lib文件下),名称相同的jar包在存入该类存储目录下时会覆盖只留一个,所以存储在类存储目录下的jar包名称都不相同,应用系统通过应用程序类加载器从类存储目录下加载不同业务模块对应的所有jar包,即加载所有jar包的类文件,不同jar包之间的类文件名称存在相同的情况,尤其是相同业务模块不同版本的jar包类文件名称基本相同,而对于名称相同的类文件类加载器不重复加载。而名称相同jar包间的内容以及名称相同类文件间的内容存在不同的情况,所以通过上述方法进行jar包加载,将导致业务模块调用jar包时出现冲突。

    3、目前解决jar包冲突的技术方案包括以下两个方面:

    4、(1)通过为业务模块每个版本的jar包创建一个类加载器,每个类加载器加载一个版本的jar包,从而解决jar包冲突的问题;当该方案应用在上述应用场景下时,所有类加载器需要从同一个类存储目录下进行jar包类文件的加载,类存储目录下存储了所有业务模块所需jar包的类文件,数量较大,每个业务模块的类加载器都需要遍历该类存储目录下的大量类文件,从而找到应加载的类文件并加载,致使类文件加载复杂度和内存消耗较高,从而导致类文件加载效率降低明显;

    5、(2)通过对名称相同的jar包以及名称相同的类文件进行重命名来解决jar包冲突的问题;当该方案应用在上述场景下时,需要对类存储目录下jar包名称相同的类文件进行重命名,从而使类存储目录下存储的类文件不存在名称重复,由于应用系统不同业务模块以及不同版本的jar包的大量类文件存在大量数据冗余,尤其是同业务模块的不同版本的jar包之间有超过70%的类文件内容是相同的,不仅导致通过一个类加载器对类存储目录所有类文件进行加载时间较长,而且大量小的类文件也更容易出现存储碎片,更重要的是由于对类文件名称进行了修改,需要对有类文件名称修改的业务模块的调用算法的代码进行相应修改,容易漏改,致使调用失败。


    技术实现思路

    1、本发明实施例提供一种jar包重组方法、装置及电子设备,用于解决现有的解决jar包冲突的技术中存在的jar包数量较大、需要较长的动态类加载时间、较大的存储空间和较高的管理水平的问题。

    2、具体技术方案如下:

    3、第一方面,本发明实施例提供了一种jar包重组方法,包括以下步骤:

    4、获取应用系统不同业务模块所对应的jar包,并对每个所述业务模块的jar包进行解压,获取每个所述业务模块对应的类文件;

    5、分别将每一个所述类文件作为一个待检测类文件,将所述待检测类文件与每个所述业务模块对应的类文件进行比较,得到比较结果;所述比较结果包括:

    6、在所有业务模块的类文件中都存在所述待检测类文件、且名称和内容都相同,将所述待检测类文件判定为全局共享类文件;

    7、在部分所述业务模块的类文件中存在所述待检测类文件、且名称和内容都相同,将所述待检测类文件判定为局部共享类文件;

    8、仅在一个所述业务模块的类文件中存在所述待检测类文件,将所述待检测类文件判定为独有类文件;

    9、根据所述比较结果,对所有所述业务模块对应的类文件进行重组,得到全局共享jar包、局部共享jar包和独有jar包;其中,每个局部共享jar包的名称包含对应的所有所述业务模块的名称;每个独有jar包的名称包含对应所述业务模块的名称;

    10、将所述全局共享jar包、所述局部共享jar包以及所述独有jar包依次存入应用系统的类存储目录以及类存储目录下的一级目录、二级目录。

    11、可选的,所述将所述待检测类文件与每个所述业务模块对应的类文件进行比较,得到比较结果,包括:

    12、将所述待检测类文件的名称分别与每个所述业务模块对应的类文件中的每个类文件名称进行比较;

    13、如果所述业务模块存在与所述待检测类文件名称相同的类文件,获取所述待检测类文件的文件签名,判断所述待检测类文件的文件签名与名称相同的所述类文件的文件签名是否相同;如果文件签名相同,所述业务模块存在与所述待检测类文件名称和内容都相同的类文件;如果文件签名不相同,所述业务模块不存在与所述待检测类文件名称和内容都相同的类文件;其中,一个类文件对应一个唯一的文件签名;

    14、如果所述业务模块不存在与所述待检测类文件名称相同的类文件,所述业务模块不存在与所述待检测类文件名称和内容都相同的类文件;

    15、根据存在与所述待检测类文件名称和内容都相同类文件的业务模块数量,判断所述待检测类文件为全局共享类文件、局部共享类文件或独有类文件。

    16、可选的,所述根据所述比较结果,对所有所述业务模块对应的类文件进行重组,得到全局共享jar包、局部共享jar包和独有jar包,包括:

    17、将所有所述全局共享类文件打包为一个所述全局共享jar包;

    18、按照存在所述局部共享类文件的业务模块种类是否相同对所有局部共享类文件进行分组,并将每组所述局部共享类文件打包为一个所述局部共享jar包;

    19、将不同业务模块的所述独有类文件分别打包为一个独有jar包。

    20、可选的,在所述将所述全局共享jar包、所述局部共享jar包以及所述独有jar包依次存入应用系统的类存储目录以及类存储目录下的一级目录、二级目录之前,还包括:

    21、判断所述应用系统的类存储目录下是否存在一级目录、二级目录;

    22、如果存在,将所述全局共享jar包、所述局部共享jar包以及所述独有jar包依次存入应用系统的类存储目录以及类存储目录下的一级目录、二级目录;

    23、如果不存在,在所述类存储目录下创建一级目录以及二级目录。

    24、可选的,在所述业务模块存在与所述待检测类文件名称和内容都相同的类文件时,将名称和内容都相同的所述类文件从所述业务模块对应的类文件中删除,并记录存在所述待检测类文件的业务模块。

    25、第二方面,本发明实施例还提供了一种java应用系统类加载的方法,所述java应用系统不同业务模块所需要的jar包,由上述第一方面所述的任一一种jar包重组方法,重组后存储在类存储目录中,还包括:

    26、第一类加载器从类存储目录中预加载全局共享jar包的全局共享类文件;

    27、以所述第一类加载器为父加载器为每个局部共享类文件创建一个第二类加载器,每个第二类加载器从类存储目录的一级目录中加载对应的局部共享jar包的局部共类文件;

    28、根据独有jar包名称中的业务模块名称从所有局部共享jar包中查找名称中包含所述业务模块名称的局部共享jar包,以查找到的局部共享jar包对应的所有第二类加载器为父加载器为所述独有jar包创建一个第三类加载器,每个第三类加载器从类存储目录的二级目录中加载对应的独有jar包的独有类文件。

    29、第三方面,本发明实施例还提供了一种jar包重组装置,该装置包括:

    30、获取模块,用于获取应用系统不同业务模块所对应的jar包,并对每个所述业务模块的jar包进行解压,获取每个所述业务模块对应的类文件;

    31、比较模块,用于分别将每一个所述类文件作为一个待检测类文件,将所述待检测类文件与每个所述业务模块对应的类文件进行比较,得到比较结果;所述比较结果包括:

    32、在所有业务模块的类文件中都存在所述待检测类文件、且名称和内容都相同,将所述待检测类文件判定为全局共享类文件;

    33、在部分所述业务模块的类文件中存在所述待检测类文件、且名称和内容都相同,将所述待检测类文件判定为局部共享类文件;

    34、仅在一个所述业务模块的类文件中存在所述待检测类文件,将所述待检测类文件判定为独有类文件;

    35、重组模块,用于根据所述比较结果,对所有所述业务模块对应的类文件进行重组,得到全局共享jar包、局部共享jar包和独有jar包;其中,每个局部共享jar包的名称包含对应的所有所述业务模块的名称;每个独有jar包的名称包含对应所述业务模块的名称;

    36、保存模块,用于将所述全局共享jar包、所述局部共享jar包以及所述独有jar包依次存入应用系统的类存储目录以及类存储目录下的一级目录、二级目录。

    37、可选的,比较模块,具体用于:

    38、将所述待检测类文件的名称分别与每个所述业务模块对应的类文件中的每个类文件名称进行比较;

    39、如果所述业务模块存在与所述待检测类文件名称相同的类文件,获取所述待检测类文件的文件签名,判断所述待检测类文件的文件签名与名称相同的所述类文件的文件签名是否相同;如果文件签名相同,所述业务模块存在与所述待检测类文件名称和内容都相同的类文件;如果文件签名不相同,所述业务模块不存在与所述待检测类文件名称和内容都相同的类文件;其中,一个类文件对应一个唯一的文件签名;

    40、如果所述业务模块不存在与所述待检测类文件名称相同的类文件,所述业务模块不存在与所述待检测类文件名称和内容都相同的类文件;

    41、根据存在与所述待检测类文件名称和内容都相同类文件的业务模块数量,判断所述待检测类文件为全局共享类文件、局部共享类文件或独有类文件。

    42、可选的,重组模块,具体用于:

    43、将所有所述全局共享类文件打包为一个所述全局共享jar包;

    44、按照存在所述局部共享类文件的业务模块种类是否相同对所有局部共享类文件进行分组,并将每组所述局部共享类文件打包为一个所述局部共享jar包;

    45、将不同业务模块的所述独有类文件分别打包为一个独有jar包。

    46、可选的,该装置,还包括:判断模块,用于:

    47、在所述将所述全局共享jar包、所述局部共享jar包以及所述独有jar包依次存入应用系统的类存储目录以及类存储目录下的一级目录、二级目录之前,判断所述应用系统的类存储目录下是否存在一级目录、二级目录;

    48、如果存在,将所述全局共享jar包、所述局部共享jar包以及所述独有jar包依次存入应用系统的类存储目录以及类存储目录下的一级目录、二级目录;

    49、如果不存在,在所述类存储目录下创建一级目录以及二级目录。

    50、可选的,该装置,还包括:删除模块,用于:

    51、在所述业务模块存在与所述待检测类文件名称和内容都相同的类文件时,将名称和内容都相同的所述类文件从所述业务模块对应的类文件中删除,并记录存在所述待检测类文件的业务模块。

    52、第四方面,本发明实施例还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

    53、存储器,用于存放计算机程序;

    54、处理器,用于执行存储器上所存放的程序时,实现上述第一方面所述的jar包重组方法步骤。

    55、第五方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的jar包重组方法步骤。

    56、本发明实施例提供的jar包重组方法,可以实现获取应用系统不同业务模块所对应的jar包,并对每个业务模块的jar包进行解压,获取每个业务模块对应的类文件;分别将每一个类文件作为一个待检测类文件,将待检测类文件与每个业务模块对应的类文件进行比较,得到比较结果;根据比较结果,对所有业务模块对应的类文件进行重组,得到全局共享jar包、局部共享jar包和独有jar包;将全局共享jar包、局部共享jar包以及独有jar包依次存入应用系统的类存储目录以及类存储目录下的一级目录、二级目录。可见,应用本发明实施例提供的方法,可以实现对不同版本依赖的jar包进行解压;并重组且打包为:全局共享jar包、局部共享jar包和独有jar包,这三类jar包;而这三类jar包相互间没有重复的类文件;因此,jar包的数量小,相应的需要的加载时间就短、需要的存储空间就小对管理水平的要求也不是很高。从而解决了现有技术中存在的由于不同版本对应的jar包中大多数类文件是重复的,导致的在同时加载不同版本对应的jar包时,存在jar包数量较大、需要较长的动态类加载时间、较大的存储空间和较高的管理水平的问题。

    57、本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获取。

    58、下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。


    技术特征:

    1.一种jar包重组方法,其特征在于,包括以下步骤:

    2.根据权利要求1所述的方法,其特征在于,所述将所述待检测类文件与每个所述业务模块对应的类文件进行比较,得到比较结果,包括:

    3.根据权利要求1所述的方法,其特征在于,所述根据所述比较结果,对所有所述业务模块对应的类文件进行重组,得到全局共享jar包、局部共享jar包和独有jar包,包括:

    4.根据权利要求1所述的方法,其特征在于,在所述将所述全局共享jar包、所述局部共享jar包以及所述独有jar包依次存入应用系统的类存储目录以及类存储目录下的一级目录、二级目录之前,还包括:

    5.根据权利要求2所述的方法,其特征在于,在所述业务模块存在与所述待检测类文件名称和内容都相同的类文件时,将名称和内容都相同的所述类文件从所述业务模块对应的类文件中删除,并记录存在所述待检测类文件的业务模块。

    6.一种java应用系统类加载的方法,其特征在于,所述java应用系统不同业务模块所需要的jar包,由权利要求1至5所述的任一一种jar包重组方法,重组后存储在类存储目录中,还包括:

    7.一种jar包重组装置,其特征在于,所述装置,包括:

    8.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,所述处理器,所述通信接口,所述存储器通过所述通信总线完成相互间的通信;

    9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-5任一所述的方法步骤。


    技术总结
    本发明公开了一种Jar包重组方法。所述方法包括:获取应用系统不同业务模块所对应的Jar包,并对每个业务模块的Jar包进行解压,获取每个业务模块对应的类文件;分别将每一个类文件作为一个待检测类文件,将待检测类文件与每个业务模块对应的类文件进行比较,得到比较结果;根据比较结果,对所有业务模块对应的类文件进行重组,得到全局共享Jar包、局部共享Jar包和独有Jar包;将全局共享Jar包、局部共享Jar包以及独有Jar包依次存入应用系统的类存储目录以及类存储目录下的一级目录、二级目录。本发明还公开了用于实现所述方法的装置和电子设备。

    技术研发人员:田越,汪跃辉,王飞,张英杰
    受保护的技术使用者:北京友友天宇系统技术有限公司
    技术研发日:
    技术公布日:2024/10/24
    转载请注明原文地址:https://symbian.8miu.com/read-33216.html

    最新回复(0)