掌桥专利:专业的专利平台
掌桥专利
首页

无效依赖的删除方法、装置、计算机设备及存储介质

文献发布时间:2023-06-19 12:13:22


无效依赖的删除方法、装置、计算机设备及存储介质

技术领域

本申请涉及数据处理技术领域,尤其涉及一种无效依赖的删除方法、装置、计算机设备及存储介质。

背景技术

JAR(Java Archive,Java归档)包不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序。JAVA项目开发过程中,可直接引用JAR包,使用其类库完成功能开发,最后打出WAR包进行程序部署。JAVA项目开发引用的JAR包,包括通用开源JAR包和内部JAR包。

目前,内部JAR包上传到私服上的内部JAR包不规范,有大量的无效依赖,且没有限制JAR包无效依赖的引用,导致部署的WAR包过大,容易造成上线负担,出现部署失败、部署速度慢等问题。

发明内容

本发明提供了一种无效依赖的删除方法、装置、计算机设备及存储介质,用于删除无效依赖,提高部署效率及部署成功率。

为达到上述目的,本发明采用如下技术方案:

第一方面,本发明提供了一种无效依赖的删除方法,包括:

对目标项目包中的无效依赖进行检测,得到无效依赖列表,所述无效依赖列表中包括至少一个无效的依赖;

从预置规则库中获取与所述目标项目包对应的必要依赖列表,所述预置规则库中存储有不同项目包分别对应的必要依赖列表;

确定所述无效依赖列表与所述必要依赖列表中的相同依赖;

将所述无效依赖列表中的所述相同依赖过滤;

将所述目标项目包中与过滤后的所述无效依赖列表中对应的依赖删除。

第二方面,本发明提供了一种无效依赖的删除装置,包括:

检测模块,用于对目标项目包中的无效依赖进行检测,得到无效依赖列表,所述无效依赖列表中包括至少一个无效的依赖;

获取模块,用于从预置规则库中获取与所述目标项目包对应的必要依赖列表,所述预置规则库中存储有不同项目包分别对应的必要依赖列表;

确定模块,用于确定所述无效依赖列表与所述必要依赖列表中的相同依赖;

过滤模块,用于将所述无效依赖列表中的所述相同依赖过滤;

删除模块,用于将所述目标项目包中与过滤后的所述无效依赖列表中对应的依赖删除。

第三方面,本发明提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行上述无效依赖的删除方法。

第四方面,本发明提供了一种计算机程序产品,其中,所述计算机程序产品包括计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行上述无效依赖的删除方法。

本发明提供的一种无效依赖的删除方法、装置、计算机设备及存储介质,首先对目标项目包中的无效依赖进行检测,得到无效依赖列表,然后从预置规则库中获取与目标项目包对应的必要依赖列表,确定无效依赖列表与所述必要依赖列表中的相同依赖;将无效依赖列表中的相同依赖过滤;最后将目标项目包中与过滤后的无效依赖列表中对应的依赖删除,得到最终的无效依赖结果。从而通过本实施例实现了目标项目包无效依赖的自动删除,进而可提高部署效率及部署成功率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本实施例提供的一种无效依赖的删除方法流程图;

图2为本实施例提供的一种无效依赖的删除总架构图;

图3为本实施例提供的一种无效依赖的删除装置结构框图;

图4为本实施例提供的一种计算机设备的一示意图。

具体实施方式

为了更好的理解上述技术方案,下面通过附图以及具体实施例对本申请实施例的技术方案做详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请实施例技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互组合。

术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。

如图1所示,本实施例提供一种无效依赖的删除方法,可以包括:

S10、对目标项目包中的无效依赖进行检测,得到无效依赖列表。

其中,目标项目包具体可以为JAR包,也可以为WAR包,本实施例不做具体限定。无效依赖为JAVA项目中声明了(引入了JAR包),但是没有使用的依赖。即在JAVA项目的pom文件中引入了JAR包,但是程序执行的过程中没有用到的依赖为无效依赖。

具体的,本实施例通过JGit(JGit为java代码提交git的插件,可以通过代码连接git远程仓库,在本地建立版本库,进行拉取、提交、推送等操作)技术,从gitlab(项目管理和代码托管平台)上拉取指定分支的项目的最新源码,然后根据最新源码定位到目标项目包的pom.xml文件。使用maven命令"mvn dependency:analyze Dverbose"来解析pom.xml文件,初步分析出该目标项目包的有效依赖和无效依赖,然后将目标项目包中所有的无效依赖存储到无效依赖列表中,无效依赖列表中包括至少一个无效的依赖。

例如,目标项目包为JAR包,JAR包信息可以如下表1所示。具体的,通过表1的内容获取无效依赖列表,首先对表1中的字段“unuseddependencies”(无效依赖)进行读取,然后将读取的无效依赖存储到无效依赖列表中。其中,id用于唯一标识JAR包,通过id可以获取到对应的JAR包。

表1

S20、从预置规则库中获取与目标项目包对应的必要依赖列表。

其中,预置规则库中存储有不同项目包分别对应的必要依赖列表,必要依赖列表中对应项目包的必要依赖,该必要依赖可以根据历史项目包总结得到。预置规则库中的必要依赖列表支持数据录入方式为手动录入和自动化录入的方式。

具体的,预置规则库中存储不同项目包的数据规则结构如下表2所示。其中,id用于唯一标识预置规则库中的项目包,通过id从预置规则库中获取与目标项目包对应的数据规则结构,然后从该数据规则结构中获取目标项目包对应的必要依赖,即根据表2中的“necessarydependency”字段获取目标项目包对应的必要依赖,然后将获取的必要依赖存储到必要依赖列表中,以便于在后续步骤中,根据该必要依赖列表过滤无效依赖列表中包含的有效依赖。

表2

本发明实施例中的无效依赖检测支持JAR包项目和WAR包项目。JAR包如果存在无效依赖,则需要进行下一步的无效依赖剔除才能打包成功;WAR包项目如果存在无效依赖会影响WAR包项目的部署工作,需要研发人员手动去除无效依赖再打包部署(因为WAR包部署要求比较严谨,复杂度比较高,为了保证WAR部署的安全性,检测出无效依赖后,不允许上线,要求开发人员手动排掉无效依赖,并测试没有问题可上线部署)。

具体的,若目标项目包为WAR包,除了打需要部署的WAR包,还有可能打JAR包对外提供使用。此时WAR包和JAR包会共用同一个pom文件,无法分辨出哪些JAR包依赖是WAR项目需要的,哪些JAR包依赖是JAR项目需要的。因此,本实施例需要通过目标文件解析WAR包中的JAR包需要的类和依赖;根据解析出的类和依赖封装新的JAR包,对新的JAR包中的无效依赖进行检测,得到无效依赖列表。

S30、确定无效依赖列表与必要依赖列表中的相同依赖。

S40、将无效依赖列表中的相同依赖过滤。

例如,根据目标JAR包项目获取的无效依赖列表中包括:依赖A、依赖B、依赖C,从预置规则库中获取的与目标JAR包项目对应的必要依赖列表中包括:依赖A、依赖B、和依赖D,无效依赖列表与必要依赖列表中的相同依赖为依赖A和依赖B,也就是说无效依赖列表中的依赖A和依赖B为必要依赖,非无效依赖,需要将依赖A和依赖B从无效依赖列表中过滤,最终得到的无效依赖列表中包括:依赖C。最后将依赖C删除。

S50、将目标项目包中与过滤后的无效依赖列表中对应的依赖删除。

具体的,通过集成maven api的方式,删除无效依赖。

本发明提供的一种无效依赖的删除方法,首先对目标项目包中的无效依赖进行检测,得到无效依赖列表,然后从预置规则库中获取与目标项目包对应的必要依赖列表,确定无效依赖列表与所述必要依赖列表中的相同依赖;将无效依赖列表中的相同依赖过滤;最后将目标项目包中与过滤后的无效依赖列表中对应的依赖删除,得到最终的无效依赖结果。从而通过本实施例实现了目标项目包无效依赖的自动删除,进而可提高部署效率及部署成功率。

在本发明提供的一个实施例中,若目标项目包为JAR包,在将所述目标项目包中与过滤后的所述无效依赖列表中对应的依赖删除之后,所述方法还包括:对JAR包中的有效依赖添加非传递依赖标签。

分析出无效依赖并剔除后,自动为有效依赖添加非传递依赖标签,最终获取到一个无依赖传递、无无效依赖的JAR包。最后使用"mvn deploy -Dmaven.test.skip=true”命令进行打包上传目标服务器。

例如,A->B(compile):A依赖B,B是A的编译依赖范围,在A编译、测试、运行时都依赖B;B->C(compile) :B依赖C,C是B的编译依赖范围,在B编译、测试、运行时都依赖C。那么对运行A时会自动导入C的这种情况称之为依赖传递。非传递依赖标签为

进一步的,在将所述目标项目包中与过滤后的所述无效依赖列表中对应的依赖删除之后,所述方法还包括:对经过无效依赖删除的所述目标项目包重新打包得到目标JAR包;将所述目标JAR包上传至目标服务器。

具体的,本实施例通过IDEA(IntelliJ IDEA,java编程语言开发的集成环境)插件对JAR包打包。打包过程中会进行无效依赖过滤、去除依赖传递,打包成功后上传目标服务器,供开发人员引用。IDEA插件为内部JAR包的打包、引包提供了统一入口的工具,方便了高版本依赖包的可感知、可引用。

进一步的,所述方法还包括:接收依赖包引入请求,所述依赖包引入请求包含引入依赖;查询所述预置规则库中与所述目标项目包对应的冲突依赖列表;判断所冲突依赖中列表中是否存在所述引入依赖;若冲突依赖中列表中存在所述引入依赖,则输出引入依赖冲突提示信息。

高版本依赖升级通知为开发人员打开项目的pom.xml文件时,本地依赖有比当前使用版本高的版本,会有高版本升级的消息通知。

用户触发的依赖包引入请求,依赖包搜索支持关键字搜索和按照classname搜索,也支持模糊搜索。

引入依赖功能可支持传递依赖标签依赖引入、非传递依赖标签依赖引入、必要依赖的标记及引入,依赖包引入源为目标服务器。当引入某个依赖时,会根据预置规则库中的规则进行自动化的分析,提示出该依赖是否存在依赖冲突或必要依赖。

当开发人员通过IDEA引包插件引用JAR包时,首先判断引入依赖是否为目标项目包的冲突依赖,即查询预置规则库中与目标项目包对应的冲突依赖列表;判断所冲突依赖中列表中是否存在所述引入依赖;若所冲突依赖中列表中存在所述引入依赖,则输出引入依赖冲突提示信息。

在本实施例中,预置规则库中的依赖包冲突的解决很大程度上依赖经验,大家在解决过程中往往会碰到同样的问题,进行同样的排查过程,严重浪费开发资源。这些依赖经验在本实施例中提取为规则库流程。

JAR包规则覆盖有效依赖引用、依赖冲突规避两种情况,例如:1.服务注册JAR包因版本不同,其必要依赖也会有版本差异,当引用0.0.9版本的服务注册JAR包时会推荐当前版本匹配的必要依赖JAR包;2.JAVA8不兼容某个版本的spring相关依赖包,会提前将依赖冲突规则录入到预置规则库中,当研发人员引包时,会将提示不可引用的JAR包或推荐引用的JAR包。

根据入参查找规则数据举例,如果想要引用spring-framework-3.2.0.RELEASE包时,会查询预置规则库中是否有录入此包相关的依赖冲突规则。如有,会提示:spring-framework-3.2.0.RELEASE与JAVA8有冲突,推荐使用spring-framework-5.1.0.RELEASE以上版本。研发人员可根据提示,重新搜索spring-framework-5.1.0.RELEASE以上版本的新包引入。

如图2所示的无效依赖的删除总架构图,包括应用层、服务层、JAR包处理模块、JAR包规则库(预置规则库)。服务层接收应用层中各应用服务发送的JAR打包请求,然后将该打包请求发送给JAR包处理模块,JAR包处理模块对该打包请求进行处理。具体的,传入projectname gitlab地址,根据gitlab 地址获取gitlab代码,解析pom文件,是否有packing,如果有则需要区分包的类型。对于JAR类型的包,需要根据JAR包规则库进行依赖解析,获取JAR包中的无效依赖,并将无效依赖删除;对于WAR类型的包,需要解析WAR包中的JAR包需要的类和依赖;根据解析出的所述类和所述依赖封装新的JAR包;对所述新的JAR包中的无效依赖进行检测,得到无效依赖列表,然后删除JAR包中的无效依赖。

本申请实施例可以根据上述方法示例对无效依赖的删除装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

在采用对应各个功能划分各个功能模块的情况下,图3示出了无效依赖的删除装置的一种可能的组成示意图,如图3所示,该无效依赖的删除装置包括:检测模块10、获取模块20、确定模块30、过滤模块40和删除模块50。

检测模块10,用于对目标项目包中的无效依赖进行检测,得到无效依赖列表,所述无效依赖列表中包括至少一个无效的依赖;

获取模块20,用于从预置规则库中获取与所述目标项目包对应的必要依赖列表,所述预置规则库中存储有不同项目包分别对应的必要依赖列表;

确定模块30,用于确定所述无效依赖列表与所述必要依赖列表中的相同依赖;

过滤模块40,用于将所述无效依赖列表中的所述相同依赖过滤;

删除模块50,用于将所述目标项目包中与过滤后的所述无效依赖列表中对应的依赖删除。

进一步的,所述装置还包括:

解析模块60,用于若所述目标项目包为WAR包,通过目标文件解析所述WAR包中的JAR包需要的类和依赖;

所述检测模块10,还用于对所述新的JAR包中的无效依赖进行检测,得到无效依赖列表。

进一步的,所述装置还包括:

添加模块70,用于若所述目标项目包为JAR包,对所述JAR包中的有效依赖添加非传递依赖标签。

进一步的,所述装置还包括:

打包模块,用于对经过无效依赖删除的所述目标项目包重新打包得到目标JAR包;

上传模块,用于将所述目标JAR包上传至目标服务器。

进一步的,所述装置还包括:

接收模块,用于接收依赖包引入请求,所述依赖包引入请求包含引入依赖;

查询模块,用于查询所述预置规则库中与所述目标项目包对应的冲突依赖列表,所述预置规则库中还存储有不同项目包分别对应的冲突依赖列表;

判断模块,用于判断所冲突依赖中列表中是否存在所述引入依赖;

输出模块,用于若所述冲突依赖中列表中存在所述引入依赖,则输出引入依赖冲突提示信息。

关于无效依赖的删除装置的具体限定可以参见上文中对于无效依赖的删除方法的限定,在此不再赘述。上述设备中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种无效依赖的删除方法。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:

对目标项目包中的无效依赖进行检测,得到无效依赖列表,所述无效依赖列表中包括至少一个无效的依赖;

从预置规则库中获取与所述目标项目包对应的必要依赖列表,所述预置规则库中存储有不同项目包分别对应的必要依赖列表;

确定所述无效依赖列表与所述必要依赖列表中的相同依赖;

将所述无效依赖列表中的所述相同依赖过滤;

将所述目标项目包中与过滤后的所述无效依赖列表中对应的依赖删除。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:

对目标项目包中的无效依赖进行检测,得到无效依赖列表,所述无效依赖列表中包括至少一个无效的依赖;

从预置规则库中获取与所述目标项目包对应的必要依赖列表,所述预置规则库中存储有不同项目包分别对应的必要依赖列表;

确定所述无效依赖列表与所述必要依赖列表中的相同依赖;

将所述无效依赖列表中的所述相同依赖过滤;

将所述目标项目包中与过滤后的所述无效依赖列表中对应的依赖删除。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。

以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

相关技术
  • 无效依赖的删除方法、装置、计算机设备及存储介质
  • 无效重传包减少方法、装置、设备及计算机存储介质
技术分类

06120113213074