CN108628751B - 一种无用依赖项检测方法及装置 - Google Patents

一种无用依赖项检测方法及装置 Download PDF

Info

Publication number
CN108628751B
CN108628751B CN201810474826.XA CN201810474826A CN108628751B CN 108628751 B CN108628751 B CN 108628751B CN 201810474826 A CN201810474826 A CN 201810474826A CN 108628751 B CN108628751 B CN 108628751B
Authority
CN
China
Prior art keywords
dependency
items
dependent
item
useless
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.)
Active
Application number
CN201810474826.XA
Other languages
English (en)
Other versions
CN108628751A (zh
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.)
Beijing Sankuai Online Technology Co Ltd
Original Assignee
Beijing Sankuai Online Technology Co 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 Beijing Sankuai Online Technology Co Ltd filed Critical Beijing Sankuai Online Technology Co Ltd
Priority to CN201810474826.XA priority Critical patent/CN108628751B/zh
Publication of CN108628751A publication Critical patent/CN108628751A/zh
Application granted granted Critical
Publication of CN108628751B publication Critical patent/CN108628751B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design

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

本发明实施例中,提出一种无用依赖项检测方法及装置,其中,该方法包括:获取软件项目运行时加载的目标类;从软件项目的配置文件中,获取软件项目的所有依赖项;根据所有依赖项,建立所有依赖项中各依赖项与其包含的各类的类名的预设对应关系;其中,各依赖项包含的各类包括目标类;根据目标类和预设对应关系,检测所有依赖项中的无用依赖项,其中,无用依赖项为软件项目运行时所有依赖项中使用不到的依赖项。通过本发明的技术方案,可准确地检测出该软件项目的所有依赖项中的无用依赖项,提高无用依赖项的检测结果的准确性和全面性。

Description

一种无用依赖项检测方法及装置
技术领域
本发明涉及软件技术领域,尤其涉及一种无用依赖项检测方法及装置。
背景技术
目前,软件项目(如Maven软件项目)中使用到的依赖项如图1所示,通常包括有用依赖项(指在项目运行的过程中,需要使用到的依赖项)、无用依赖项(指在项目运行的过程中,使用不到的依赖项)和冲突依赖项(指依赖项大体相同,但版本不同,如图1中的一级子节点中的依赖项A与二级子节点中的依赖项A,即版本不同的冲突依赖项)。
但通常情况下,开发人员只会关注冲突依赖项,因为它可能使程序运行出现错误,而很少关注无用依赖项,因为它不会直接造成程序的错误;但它却是一个潜在的威胁,一方面大量无用依赖项的存在会降低软件项目的编译、打包、发布速度,另一方面,由于依赖项数量的增加,造成项目产生依赖项冲突和类冲突的风险相应增加。
而对于无用依赖项的检测,相关技术还没有完整有效的方案,主要有两方面的原因:一方面无用依赖项本身未得到足够的重视;另一方面也缺乏有效的工具。
目前,各技术论坛的主流方案是通过静态代码解析来查找无用依赖项,以Maven(可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具)软件项目为例,其代表方案就是Maven官方的一个工具analyze,它的工作原理是检测当前项目中的所有代码(Bytecode解析,其中,Bytecode即Java字节码)和Pom文件(Project ObjectModel,项目对象模型,定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等)中定义的直接依赖项(即根结点引入的依赖项称之为直接依赖项,如图1中的A、B、C、D依赖项)以确定无用依赖项,具体地,Bytecode解析得到Maven软件项目中使用到的class(类),再从直接依赖项中查找class所在的jar(Java Archive,Java归档文件),从而判断直接依赖项中的有用依赖项和无用依赖项。
但从实际应用的效果中得知,其分析结果是非常不准确的,最主要的原因是它的检测原理有以下问题:
采用静态Bytecode解析与JVM(Java Virtual Machine,Java虚拟机)运行时动态加载原理相悖,造成分析结果不准确;
只分析软件项目中的直接依赖项,但大部分无用依赖项却分布在间接依赖项(即由直接依赖项引入的依赖项,如图1中A、B、C、D依赖项之外的依赖项E、F、G等)中;
只有分析结果,没有自动化生成相应的解决方案。
发明内容
鉴于上述问题,提出了本发明,以便提供一种克服上述问题或者至少部分地解决上述问题的一种无用依赖项检测方法及装置,用于解决现有技术中存在的上述至少部分缺陷。
依据本发明的第一方面,提供了一种无用依赖项检测方法,包括:
获取软件项目运行时加载的目标类;
从所述软件项目的配置文件中,获取所述软件项目的所有依赖项;
根据所述所有依赖项,建立所述所有依赖项中各依赖项与其包含的各类的类名的预设对应关系;其中,所述各依赖项包含的各类包括所述目标类;
根据所述目标类和所述预设对应关系,检测所述所有依赖项中的无用依赖项,其中,所述无用依赖项为所述软件项目运行时所述所有依赖项中使用不到的依赖项。
在一个实施方式中,所述根据所述所有依赖项,建立所述所有依赖项中各依赖项与其包含的各类的类名的预设对应关系,包括:
获取所述各依赖项的档案文件;
将所述各依赖项的档案文件进行解压,获取所述各依赖项的档案文件中包含的各类的类名;
建立所述各依赖项与所述各依赖项的档案文件中包含的各类的类名之间的所述预设对应关系。
在一个实施方式中,所述根据所述目标类和所述预设对应关系,检测所述所有依赖项中的无用依赖项,包括:
确定所述预设对应关系中不与所述目标类的类名对应的依赖项;
将所述预设对应关系中,不与所述目标类的类名对应的依赖项确定为所述无用依赖项。
在一个实施方式中,所述方法还包括:
根据所述无用依赖项,生成依赖项处理方案;
根据所述依赖项处理方案,对所述所有依赖项进行预设处理。
在一个实施方式中,所述根据所述无用依赖项,生成依赖项处理方案,包括:
从所述配置文件中获取所述所有依赖项形成的初始依赖关系树;
在所述初始依赖关系树的基础上,根据所述无用依赖项,生成所述依赖项处理方案,以调整所述初始依赖关系树。
在一个实施方式中,所述根据所述依赖项处理方案,对所述所有依赖项进行预设处理,包括:
根据所述依赖项处理方案,自动对所述所有依赖项进行所述预设处理;
或者
将所述依赖项处理方案进行显示;
当接收到根据所述依赖项处理方案对所述所有依赖项进行处理的处理命令时,根据所述处理命令,对所述所有依赖项进行所述预设处理。
在一个实施方式中,所述在所述初始依赖关系树的基础上,根据所述无用依赖项,生成所述依赖项处理方案,以调整所述初始依赖关系树,包括:
采用宽度优先遍历方式遍历所述初始依赖关系树,为所述初始依赖关系树中所述无用依赖项所在的节点设置删除标记;其中,所述删除标记用于指示将所述无用依赖项所在的节点所属的子树从所述初始依赖关系树中删除;
判断所述子树中是否存在有用依赖项,其中,所述有用依赖项为所述软件项目运行时所述所有依赖项中使用到的依赖项;
当所述子树中存在有用依赖项时,为所述子树中存在的有用依赖项设置添加标记,其中,所述添加标记用于指示将所述子树从所述初始依赖关系树中删除后,将所述子树中存在的有用依赖项重新添加至删除所述子树后获得的第一目标依赖关系树中,以获得第二目标依赖关系树。
在一个实施方式中,所述当所述子树中存在有用依赖项时,为所述子树中存在的有用依赖项设置添加标记,包括:
当所述子树中存在有用依赖项时,判断所述第一目标依赖关系树中是否存在相同的有用依赖项;
当所述第一目标依赖关系树中不存在相同的有用依赖项时,为所述子树中存在的有用依赖项设置添加标记。
在一个实施方式中,所述采用宽度优先遍历方式遍历所述初始依赖关系树,为所述初始依赖关系树中所述无用依赖项所在的节点设置删除标记,包括:
在采用宽度优先遍历方式遍历所述初始依赖关系树时,判断所述无用依赖项所在的节点是否属于所述初始依赖关系树中的一级子节点;
为属于所述初始依赖关系树中的一级子节点的无用依赖项设置第一删除标记;
为不属于所述初始依赖关系树中的一级子节点的无用依赖项设置第二删除标记,其中,所述第一删除标记和所述第二删除标记不同。
在一个实施方式中,所述预设处理包括:
将所述子树从所述初始依赖关系树中删除;
将所述子树从所述初始依赖关系树中删除后,将所述子树中存在的有用依赖项重新添加至所述第一目标依赖关系树中,以获得所述第二目标依赖关系树;以及
所述所有依赖项中各依赖项所在的节点可属于所述初始依赖关系树中的任一级子节点。
在一个实施方式中,当所述软件项目包括Maven软件项目时,
所述获取软件项目运行时加载的目标类,包括:
在所述Maven软件项目运行时,获取类加载器加载的所述目标类;
所述从所述软件项目的配置文件中,获取所述软件项目的所有依赖项,包括:
从所述Maven软件项目的Pom文件中获取所述所有依赖项。
依据本发明的第二方面,提供了一种无用依赖项检测装置,包括:
第一获取模块,用于获取软件项目运行时加载的目标类;
第二获取模块,用于从所述软件项目的配置文件中,获取所述软件项目的所有依赖项;
建立模块,用于根据所述所有依赖项,建立所述所有依赖项中各依赖项与其包含的各类的类名的预设对应关系;其中,所述各依赖项包含的各类包括所述目标类;
检测模块,用于根据所述目标类和所述预设对应关系,检测所述所有依赖项中的无用依赖项,其中,所述无用依赖项为所述软件项目运行时所述所有依赖项中使用不到的依赖项。
在一个实施方式中,所述建立模块包括:
第一获取子模块,用于获取所述各依赖项的档案文件;
第二获取子模块,用于将所述各依赖项的档案文件进行解压,获取所述各依赖项的档案文件中包含的各类的类名;
建立子模块,用于建立所述各依赖项与所述各依赖项的档案文件中包含的各类的类名之间的所述预设对应关系。
在一个实施方式中,所述检测模块包括:
第一确定子模块,用于确定所述预设对应关系中不与所述目标类的类名对应的依赖项;
第二确定子模块,用于将所述预设对应关系中,不与所述目标类的类名对应的依赖项确定为所述无用依赖项。
在一个实施方式中,所述装置还包括:
生成模块,用于根据所述无用依赖项,生成依赖项处理方案;
处理模块,用于根据所述依赖项处理方案,对所述所有依赖项进行预设处理。
在一个实施方式中,所述生成模块包括:
第三获取子模块,用于从所述配置文件中获取所述所有依赖项形成的初始依赖关系树;
生成子模块,用于在所述初始依赖关系树的基础上,根据所述无用依赖项,生成所述依赖项处理方案,以调整所述初始依赖关系树。
在一个实施方式中,所述处理模块包括:
第一处理子模块,用于根据所述依赖项处理方案,自动对所述所有依赖项进行所述预设处理;
或者
显示子模块,用于将所述依赖项处理方案进行显示;
第二处理子模块,用于当接收到根据所述依赖项处理方案对所述所有依赖项进行处理的处理命令时,根据所述处理命令,对所述所有依赖项进行所述预设处理。
在一个实施方式中,所述生成子模块包括:
第一设置单元,用于采用宽度优先遍历方式遍历所述初始依赖关系树,为所述初始依赖关系树中所述无用依赖项所在的节点设置删除标记;其中,所述删除标记用于指示将所述无用依赖项所在的节点所属的子树从所述初始依赖关系树中删除;
判断单元,用于判断所述子树中是否存在有用依赖项,其中,所述有用依赖项为所述软件项目运行时所述所有依赖项中使用到的依赖项;
第二设置单元,用于当所述子树中存在有用依赖项时,为所述子树中存在的有用依赖项设置添加标记,其中,所述添加标记用于指示将所述子树从所述初始依赖关系树中删除后,将所述子树中存在的有用依赖项重新添加至删除所述子树后获得的第一目标依赖关系树中,以获得第二目标依赖关系树。
在一个实施方式中,所述第二设置单元包括:
第一判断子单元,用于当所述子树中存在有用依赖项时,判断所述第一目标依赖关系树中是否存在相同的有用依赖项;
第一设置子单元,用于当所述第一目标依赖关系树中不存在相同的有用依赖项时,为所述子树中存在的有用依赖项设置添加标记。
在一个实施方式中,所述第一设置单元包括:
第二判断子单元,用于在采用宽度优先遍历方式遍历所述初始依赖关系树时,判断所述无用依赖项所在的节点是否属于所述初始依赖关系树中的一级子节点;
第二设置子单元,用于为属于所述初始依赖关系树中的一级子节点的无用依赖项设置第一删除标记;
第三设置子单元,用于为不属于所述初始依赖关系树中的一级子节点的无用依赖项设置第二删除标记,其中,所述第一删除标记和所述第二删除标记不同。
在一个实施方式中,所述预设处理包括:
将所述子树从所述初始依赖关系树中删除;
将所述子树从所述初始依赖关系树中删除后,将所述子树中存在的有用依赖项重新添加至所述第一目标依赖关系树中,以获得所述第二目标依赖关系树;以及
所述所有依赖项中各依赖项所在的节点可属于所述初始依赖关系树中的任一级子节点。
在一个实施方式中,所述第一获取模块包括:
第四获取子模块,用于当所述软件项目包括Maven软件项目时,在所述Maven软件项目运行时,获取类加载器加载的所述目标类;
所述第二获取模块包括:
第五获取子模块,用于从所述Maven软件项目的Pom文件中获取所述所有依赖项。
依据本发明的第三方面,提供了一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述指令被处理器执行时实现第一方面实施例所述方法的步骤。
本发明实施例中,提出了一种无用依赖项检测方法,包括:获取软件项目运行时加载的目标类;从所述软件项目的配置文件中,获取所述软件项目的所有依赖项;根据所述所有依赖项,建立所述所有依赖项中各依赖项与其包含的各类的类名的预设对应关系;其中,所述各依赖项包含的各类包括所述目标类;根据所述目标类和所述预设对应关系,检测所述所有依赖项中的无用依赖项,其中,所述无用依赖项为所述软件项目运行时所述所有依赖项中使用不到的依赖项。在该方案中,可准确地检测出该软件项目的所有依赖项中的无用依赖项,提高无用依赖项的检测结果的准确性和全面性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是一种软件项目中的依赖关系树的示意图。
图2是根据本发明的实施例提出的一种无用依赖项检测方法的流程图。
图3是根据本发明的实施例提出的另一种无用依赖项检测方法的流程图。
图4是根据本发明的实施例提出的一种无用依赖项检测装置的框图。
图5是根据本发明的实施例提出的一种软件项目中各依赖项与各依赖项的档案文件中包含的各类的类名之间的预设对应关系。
图6是根据本发明中的目标类和图5所示的预设对应关系,标识出软件项目中的有用依赖项和无用依赖项的示意图。
图7A是根据本发明确定的无用依赖项,将无用依赖项所在的子树从图1所示的初始依赖关系树中删除后,得到的第一目标依赖关系树的示意图。
图7B是本发明中设置有删除标记的无用依赖项所在的子树的示意图。
图7C是将图7B所示的子树中的有用依赖项M添加至图7A所示的第一目标依赖关系树后,得到的第二目标依赖关系树的示意图。
图8是根据本发明的实施例提出的另一种无用依赖项检测装置的框图。
图9是根据本发明的实施例提出的又一种无用依赖项检测装置的框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图2示意性地示出了根据本发明实施方式的无用依赖项检测方法的流程示意图。如图2所示,该方法的执行主体可以是手机、计算机等终端,或者是服务器,该方法可以包括步骤201至步骤204。
在步骤S201中,获取软件项目运行时加载的目标类;
在步骤S202中,从软件项目的配置文件中,获取软件项目的所有依赖项;
所有依赖项包括直接依赖项(即软件项目的依赖关系树中属于一级子节点的依赖项)和间接依赖项(即软件项目的依赖关系树中不属于一级子节点的依赖项,即属于二级以及二级以上子节点的依赖项),以便于之后能够全面分析出软件项目中的无用依赖项。
另外,本领域技术人员应当理解的是:有用依赖项、无用依赖项和冲突依赖项,与直接依赖项和间接依赖项都是软件项目的依赖项,只是使用了不同的纬度进行分类而已。
在步骤S203中,根据所有依赖项,建立所有依赖项中各依赖项与其包含的各类的类名的预设对应关系;其中,各依赖项包含的各类包括目标类,即目标类是各依赖项包含的各类中的至少部分类;
在步骤S204中,根据目标类和预设对应关系,检测所有依赖项中的无用依赖项,其中,无用依赖项为软件项目运行时所有依赖项中使用不到的依赖项。
本申请不对步骤S201与S202、S203之间的先后顺序做任何限定,步骤S201可在步骤S204之前任一步骤实施。
由于软件项目运行时实际加载的目标类相比于静态分析代码获得的软件项目的类而言,更加符合软件项目的实际运行情况,因而,通过获取软件项目运行时加载的目标类,以及从其配置文件中获取所有依赖项,并建立所有依赖项中各依赖项与其包含的各类的类名的预设对应关系,可根据目标类和预设对应关系,准确地检测出该软件项目的所有依赖项中的无用依赖项,提高无用依赖项的检测结果的准确性。
进一步地,由于本发明是从软件项目的所有依赖项中分析出无用依赖项,而非仅从直接依赖项中分析出无用依赖项,因而,相比于相关技术的方案,本申请可以全面检测出无用依赖项,如此,有利于进一步提高无用依赖项的检测结果的准确性和全面性。
本发明实施例中,可选地,上述图2所示的步骤S203,即根据所有依赖项,建立所有依赖项中各依赖项与其包含的各类的类名的预设对应关系,可被执行为:
获取各依赖项的档案文件;该档案文件可以是各依赖项的jar包。
将各依赖项的档案文件进行解压,获取各依赖项的档案文件中包含的各类的类名;
建立各依赖项与各依赖项的档案文件中包含的各类的类名之间的预设对应关系。
通过对各依赖项的档案文件进行解压,可得到每个档案文件中的文件名,其中每个文件名对应的就是一个类名,因而,解压后可获取各依赖项的档案文件中包含的各类的类名,然后即可建立该依赖项与各依赖项的档案文件中包含的各类的类名之间的预设对应关系(如图5所示),以便于之后根据该预设对应关系和目标类准确标记出所有依赖项中的有用依赖项和无用依赖项。
本发明实施例中,进一步地,上述图2所示的步骤S204,即根据目标类和预设对应关系,检测所有依赖项中的无用依赖项,可被执行为:
确定预设对应关系中不与目标类的类名对应的依赖项;
将预设对应关系中,不与目标类的类名对应的依赖项确定为无用依赖项。
由于目标类是软件项目运行时需要加载的类,而依赖项中又包含了各类,因而,根据该预设对应关系,即可准确确定不与目标类的类名对应的依赖项即软件项目运行时不需要使用到的依赖项(又称为无用依赖项);
相应地,该预设对应关系中,与目标类的类名对应的依赖项即软件项目运行时需要使用到的依赖项,这部分依赖项即该软件项目的有用依赖项。
如图3所示,本发明实施例中,可选地,上述图2所示的方法还可包括步骤S301和步骤S302:
在步骤S301中,根据无用依赖项,生成依赖项处理方案;
在步骤S302中,根据依赖项处理方案,对所有依赖项进行预设处理。
在准确获取软件项目中的所有无用依赖项后,可自动生成依赖项处理方案,以根据该依赖项处理方案,对所有依赖项进行预设处理,从而修改软件项目中的依赖项,以便于能够提高软件项目的编译、打包、发布速度,并尽可能地减少依赖项数量,降低造成软件项目产生依赖项冲突和类冲突的风险。
本发明实施例中,可选地,上述图3所示的步骤S301,即根据无用依赖项,生成依赖项处理方案,可被执行为:
从配置文件中获取所有依赖项形成的初始依赖关系树;
在初始依赖关系树的基础上,根据无用依赖项,生成依赖项处理方案,以调整初始依赖关系树。
在生成依赖项处理方案时,可从配置文件中一并获取所有依赖项形成的初始依赖关系树(如图1所示),进而在初始依赖关系树的基础上,根据无用依赖项,自动生成依赖项处理方案,以调整该初始依赖关系树,修改软件项目中的依赖项,从而能够提高软件项目的编译、打包、发布速度,并尽可能地减少依赖项数量,降低造成软件项目产生依赖项冲突和类冲突的风险。
本发明实施例中,可选地,上述图3所示的步骤S302,即根据依赖项处理方案,对所有依赖项进行预设处理,可被执行为:
根据依赖项处理方案,自动对所有依赖项进行预设处理;
在对所有依赖项进行处理时,可根据依赖项处理方案,自动对所有依赖项进行预设处理,以在减少用户操作的基础上,提高依赖项的处理速率。
或者
本发明实施例中,可选地,上述图3所示的步骤S302,即根据依赖项处理方案,对所有依赖项进行预设处理,可被执行为:
将依赖项处理方案进行显示;
当接收到根据依赖项处理方案对所有依赖项进行处理的处理命令时,根据处理命令,对所有依赖项进行预设处理。
将依赖项处理方案进行显示,以指导用户修改依赖项,这样在接收到上述处理命令时,再根据该处理命令,对所有依赖项进行预设处理,以根据用户意愿对依赖项进行处理。
本发明实施例中,可选地,在初始依赖关系树的基础上,根据无用依赖项,生成依赖项处理方案,以调整初始依赖关系树,可被执行为:
采用宽度优先遍历方式遍历初始依赖关系树,为初始依赖关系树中无用依赖项所在的节点设置删除标记;其中,删除标记用于指示将无用依赖项所在的节点所属的子树从初始依赖关系树中删除;
删除无用依赖项后,可减少软件项目的依赖项数量,提高软件项目的编译、打包、发布速度,并尽可能地减少依赖项数量,降低造成软件项目产生依赖项冲突和类冲突的风险。
判断子树中是否存在有用依赖项,其中,有用依赖项为软件项目运行时所有依赖项中使用到的依赖项;
当子树中存在有用依赖项时,为子树中存在的有用依赖项设置添加标记,其中,添加标记用于指示将子树从初始依赖关系树中删除后,将子树中存在的有用依赖项重新添加至删除子树后获得的第一目标依赖关系树中,以获得第二目标依赖关系树。
在生成上述依赖项处理方案时,可采用宽度优先遍历方式遍历初始依赖关系树,然后为无用依赖项所在的节点设置删除标记,进而,判断无用依赖项所在的节点所属的子树中是否存在有用依赖项,如果存在,则为该有用依赖项设置增加标记,从而得到更为准确的依赖项处理方案,使得该有用依赖项有机会被重新添加至删除上述子树后获得的第一目标依赖关系树中,得到更为准确的第二目标依赖关系树,避免删除初始依赖关系树中的有用依赖项而影响软件项目的正常运行。
本发明实施例中,可选地,当子树中存在有用依赖项时,为子树中存在的有用依赖项设置添加标记,可被执行为:
当子树中存在有用依赖项时,判断第一目标依赖关系树中是否存在相同的有用依赖项;
当第一目标依赖关系树中不存在相同的有用依赖项时,为子树中存在的有用依赖项设置添加标记。
由于依赖关系树中可能存在版本不同的冲突依赖项,因而在判断无用依赖项所在的节点所属的子树中存在有用依赖项时,可进一步判断第一目标依赖关系树中是否存在相同的有用依赖项,若不存在相同的有用依赖项,则可为子树中存在的有用依赖项设置添加标记,从而得到更为准确的依赖项处理方案,使得该有用依赖项有机会被重新添加至删除上述子树后获得的第一目标依赖关系树中,得到更为准确的第二目标依赖关系树;而若第一目标依赖关系树中存在相同的有用依赖项,则不必为该有用依赖项设置添加标记,如此,既可以避免删除初始依赖关系树中的有用依赖项而影响软件项目的正常运行,又可以避免有用依赖项的重复添加。
本发明实施例中,可选地,采用宽度优先遍历方式遍历初始依赖关系树,为初始依赖关系树中无用依赖项所在的节点设置删除标记,包括:
在采用宽度优先遍历方式遍历初始依赖关系树时,判断无用依赖项所在的节点是否属于初始依赖关系树中的一级子节点;
为属于初始依赖关系树中的一级子节点的无用依赖项设置第一删除标记;
为不属于初始依赖关系树中的一级子节点的无用依赖项设置第二删除标记,其中,第一删除标记和第二删除标记不同,其中,属于初始依赖关系树中的一级子节点的无用依赖项即直接依赖项中的无用依赖项,而不属于初始依赖关系树中的一级子节点的无用依赖项即属于二级以及二级以上的子节点的无用依赖项,又称间接依赖项中的无用依赖项。
在采用宽度优先遍历方式遍历初始依赖关系树时,可判断无用依赖项所在的节点是否属于初始依赖关系树中的一级子节点,这样,可为初始依赖关系树中不同子节点的无用依赖项设置不同的删除标记,从而生成更为准确的依赖项处理方案,使用户能够明确了解直接依赖项中的无用依赖项和间接依赖项中的无用依赖项。
本发明实施例中,可选地,预设处理包括:
将子树从初始依赖关系树中删除;
将子树从初始依赖关系树中删除后,将子树中存在的有用依赖项重新添加至第一目标依赖关系树中,以获得第二目标依赖关系树;以及
所有依赖项中各依赖项所在的节点可属于初始依赖关系树中的任一级子节点。
对所有依赖项进行预设处理既包括将子树从初始依赖关系树中删除,以得到第一目标依赖关系树,如此,即可完全删除所有依赖项中的无用依赖项,减少依赖项的数量,有利于加快软件项目的编译、打包、发布速度,降低软件项目中产生依赖冲突与class冲突的风险;又包括将子树中存在的有用依赖项重新添加至第一目标依赖关系树中,以获得第二目标依赖关系树,从而得到更为准确的该软件项目的依赖关系树,避免有用依赖项被误删除。
而所有依赖项中各依赖项所在的节点可属于初始依赖关系树中的任一级子节点即:所有依赖项既包括直接依赖项又包括间接依赖项,当然还可以包括冲突依赖项。
本发明实施例中,可选地,当软件项目包括Maven软件项目时,获取软件项目运行时加载的目标类,包括:
在Maven软件项目运行时,获取类加载器加载的目标类;
从软件项目的配置文件中,获取软件项目的所有依赖项,包括:
从Maven软件项目的Pom文件中获取所有依赖项。
当软件项目包括Maven软件项目时,上述目标类可以是Maven软件项目运行时,类加载器(classLoader)加载的类,而所有依赖项可从Maven软件项目的核心文件即Pom文件中获取,当然,初始依赖关系树也可从该Pom文件中获取。
下面将结合图1以及图4至图7C进一步详细说明本发明的具体方案:
如图4所示,该无用依赖项检测装置400包括:线上classes统计模块401、依赖统计与jar分析模块402、依赖分类标记模块403、依赖项处理方案生成模块404和结果展示模块405;其中:
线上classes统计模块401的主要目的是获取项目使用到的类。Java服务的所有class类都是通过classLoader加载的,所以为了获取java服务所使用到的类,只需要获取classLoader加载的所有的类名即可。
该线上classes统计模块401同时会提供一个RPC(Remote Procedure Call,远程过程调用)接口,供其它模块调用,来传输classLoader加载的类名(如A.xxx.xxx1,B.xxx.xxx3…)。
依赖统计与jar分析模块402用于通过分析软件项目的pom文件来获取软件项目的所有依赖项及相互之间的依赖关系(如图1所示);进而从远程仓库下载相应的依赖项的jar包,并进行解压,得到每个jar包中的文件名(其中,每一个文件名对应的就是一个类名)后,即可获取依赖项与其包含的类的预设对应关系,如图5所示。
依赖分类标记模块403用于获取线上class统计模块401和依赖统计模块与jar分析模块402的结果(即软件项目使用到的class名称,以及依赖项与类名的预设对应关系);进而遍历查找class所属的依赖项,比如线上(即软件项目运行)使用了类A.xxx.xxx1,然后根据查找图5所示的预设对应关系后,发现类A.xxx.xxx1在依赖项A中,则将依赖项A标记为“有用”。遍历标记结束之后,预设对应关系中所有未被标记的依赖项,则被标记为“无用”,例如,软件项目运行时使用了类A.xxx.xxx2和类C.xxx.xxx3,未使用类B.xxx.xxxN,则图5所示的预设对应关系中,依赖项A和依赖项C为有用依赖项,依赖项B为有无用依赖项,如图6所示。
依赖项依赖项处理方案生成模块404用于在尽可能保证软件项目准备性的情况下,生成相应的方案。该模块404需要利用依赖统计与jar分析模块402获得的如图1所示的初始依赖关系树和依赖分类标记模块403标记出的的无用依赖项来生成依赖项处理方案。
假定:在如图1所示的初始依赖关系树中,依赖分类标记模块403标记出的的有用依赖项为A、C、F、M是有用依赖项,其它的均为无用依赖项,则生成依赖项处理方案的具体步骤如下:
步骤1:宽度优先遍历如图1所示的初始依赖关系树,查找无用依赖项所在的位置。如果无用依赖项是直接依赖项(即root的子节点),则将该无用依赖项标记成“删除”,否则标记为“exclusion”。
进而将标记为“删除”和“exclusion”的子节点从初始依赖关系树中删除后,得到如图7A所示的第一目标依赖关系树,同时将删除的子节点保存起来得到如图7B所示的无用依赖项所在的节点的子树(其中,图7B中依赖项L、J、K未被标记,是因为采用宽度优先遍历,B节点从图1所示的初始依赖关系树中删除之后,初始依赖关系树中就不存在依赖项J、K了,也就不需要增加“删除”标记或者“exclusion”标记,依赖项L同理)。
步骤2:从如图7B所示的被删除的子树中查找是否存在有用依赖项,如果存在有用依赖项,则查找第一目标依赖关系树中是否已包含该依赖项,如果包含则不处理,如果未包含,则为该依赖项增加“添加”标记。
而从图7B中可知,依赖项A和M是有用依赖项,但依赖项A在第一目标依赖关系树中已经存在,而依赖项M并不存在,因而,只需要为依赖项M增加“添加”标记,从而得到以下依赖项处理方案:
从依赖项A中exclusion G
从依赖项A中exclusion E
删除依赖项B
从依赖项C中exclusion H
从依赖项C中exclusion I
添加依赖项M
删除依赖项D
该依赖项处理方案可用于指导用户修改依赖项,从而得到如图7C所示的第二目标依赖关系树:
结果展示模块405用于将依赖项处理方案生成模块404生成的依赖项处理方案以报告等形式展示给用户,以辅助用户修改该Maven软件项目的pom文件。
如图8所示,本发明实施例中,还提出一种无用依赖项检测装置800,包括:
第一获取模块801,被配置为获取软件项目运行时加载的目标类;
第二获取模块802,被配置为从软件项目的配置文件中,获取软件项目的所有依赖项;
建立模块803,被配置为根据所有依赖项,建立所有依赖项中各依赖项与其包含的各类的类名的预设对应关系;其中,各依赖项包含的各类包括目标类;
检测模块804,被配置为根据目标类和预设对应关系,检测所有依赖项中的无用依赖项,其中,无用依赖项为软件项目运行时所有依赖项中使用不到的依赖项。
本发明实施例中,可选地,建立模块803包括:
第一获取子模块,被配置为获取各依赖项的档案文件;
第二获取子模块,被配置为将各依赖项的档案文件进行解压,获取各依赖项的档案文件中包含的各类的类名;
建立子模块,被配置为建立各依赖项与各依赖项的档案文件中包含的各类的类名之间的预设对应关系。
本发明实施例中,可选地,检测模块804可以包括:
第一确定子模块,被配置为确定预设对应关系中不与目标类的类名对应的依赖项;
第二确定子模块,被配置为将预设对应关系中,不与目标类的类名对应的依赖项确定为无用依赖项。
如图9所示,本发明实施例中,进一步地,上述图8所示装置还可包括:
生成模块901,被配置为根据无用依赖项,生成依赖项处理方案;
处理模块902,被配置为根据依赖项处理方案,对所有依赖项进行预设处理。
本发明实施例中,可选地,生成模块901包括:
第三获取子模块,被配置为从配置文件中获取所有依赖项形成的初始依赖关系树;
生成子模块,被配置为在初始依赖关系树的基础上,根据无用依赖项,生成依赖项处理方案,以调整初始依赖关系树。
本发明实施例中,可选地,处理模块902包括:
第一处理子模块,被配置为根据依赖项处理方案,自动对所有依赖项进行预设处理;
或者
本发明实施例中,可选地,处理模块902包括:
显示子模块,被配置为将依赖项处理方案进行显示;
第二处理子模块,被配置为当接收到根据依赖项处理方案对所有依赖项进行处理的处理命令时,根据处理命令,对所有依赖项进行预设处理。
本发明实施例中,可选地,生成子模块包括:
第一设置单元,被配置为采用宽度优先遍历方式遍历初始依赖关系树,为初始依赖关系树中无用依赖项所在的节点设置删除标记;其中,删除标记被配置为指示将无用依赖项所在的节点所属的子树从初始依赖关系树中删除;
判断单元,被配置为判断子树中是否存在有用依赖项,其中,有用依赖项为软件项目运行时所有依赖项中使用到的依赖项;
第二设置单元,被配置为当子树中存在有用依赖项时,为子树中存在的有用依赖项设置添加标记,其中,添加标记被配置为指示将子树从初始依赖关系树中删除后,将子树中存在的有用依赖项重新添加至删除子树后获得的第一目标依赖关系树中,以获得第二目标依赖关系树。
本发明实施例中,可选地,第二设置单元包括:
第一判断子单元,被配置为当子树中存在有用依赖项时,判断第一目标依赖关系树中是否存在相同的有用依赖项;
第一设置子单元,被配置为当第一目标依赖关系树中不存在相同的有用依赖项时,为子树中存在的有用依赖项设置添加标记。
本发明实施例中,可选地,第一设置单元包括:
第二判断子单元,被配置为在采用宽度优先遍历方式遍历初始依赖关系树时,判断无用依赖项所在的节点是否属于初始依赖关系树中的一级子节点;
第二设置子单元,被配置为为属于初始依赖关系树中的一级子节点的无用依赖项设置第一删除标记;
第三设置子单元,被配置为为不属于初始依赖关系树中的一级子节点的无用依赖项设置第二删除标记,其中,第一删除标记和第二删除标记不同。
本发明实施例中,可选地,预设处理包括:
将子树从初始依赖关系树中删除;
将子树从初始依赖关系树中删除后,将子树中存在的有用依赖项重新添加至第一目标依赖关系树中,以获得第二目标依赖关系树;以及
所有依赖项中各依赖项所在的节点可属于初始依赖关系树中的任一级子节点。
本发明实施例中,可选地,第一获取模块801可以包括:
第四获取子模块,被配置为当软件项目包括Maven软件项目时,在Maven软件项目运行时,获取类加载器加载的目标类;
第二获取模块包括:
第五获取子模块,被配置为从Maven软件项目的Pom文件中获取所有依赖项。
在此提供的方法和装置不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的装置中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个装置中。可以把实施例中的若干模块组合成一个模块或单元或组件,以及此外可以把它们分成多个模块或单元或组件。除了这样的特征和/或过程或者模块中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个装置实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的装置中的一些或者全部模块的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的装置程序(例如,计算机程序和计算机程序产品)。
这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (15)

1.一种无用依赖项检测方法,其特征在于,包括:
获取软件项目运行时加载的目标类;
从所述软件项目的配置文件中,获取所述软件项目的所有依赖项;
根据所述所有依赖项,建立所述所有依赖项中各依赖项与其包含的各类的类名的预设对应关系;其中,所述各依赖项包含的各类包括所述目标类;
根据所述目标类和所述预设对应关系,检测所述所有依赖项中的无用依赖项,其中,所述无用依赖项为所述软件项目运行时所述所有依赖项中使用不到的依赖项。
2.如权利要求1所述的方法,其特征在于,
所述根据所述所有依赖项,建立所述所有依赖项中各依赖项与其包含的各类的类名的预设对应关系,包括:
获取所述各依赖项的档案文件;
将所述各依赖项的档案文件进行解压,获取所述各依赖项的档案文件中包含的各类的类名;
建立所述各依赖项与所述各依赖项的档案文件中包含的各类的类名之间的所述预设对应关系。
3.如权利要求2所述的方法,其特征在于,
所述根据所述目标类和所述预设对应关系,检测所述所有依赖项中的无用依赖项,包括:
确定所述预设对应关系中不与所述目标类的类名对应的依赖项;
将所述预设对应关系中,不与所述目标类的类名对应的依赖项确定为所述无用依赖项。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:根据所述无用依赖项,生成依赖项处理方案,包括:
从所述配置文件中获取所述所有依赖项形成的初始依赖关系树;
在所述初始依赖关系树的基础上,根据所述无用依赖项,生成所述依赖项处理方案,以调整所述初始依赖关系树。
5.如权利要求4所述的方法,其特征在于,所述方法还包括:根据所述依赖项处理方案,对所述所有依赖项进行预设处理,包括:
根据所述依赖项处理方案,自动对所述所有依赖项进行所述预设处理;
或者
将所述依赖项处理方案进行显示;
当接收到根据所述依赖项处理方案对所述所有依赖项进行处理的处理命令时,根据所述处理命令,对所述所有依赖项进行所述预设处理。
6.如权利要求5所述的方法,其特征在于,
所述在所述初始依赖关系树的基础上,根据所述无用依赖项,生成所述依赖项处理方案,以调整所述初始依赖关系树,包括:
采用宽度优先遍历方式遍历所述初始依赖关系树,为所述初始依赖关系树中所述无用依赖项所在的节点设置删除标记;其中,所述删除标记用于指示将所述无用依赖项所在的节点所属的子树从所述初始依赖关系树中删除;
判断所述子树中是否存在有用依赖项,其中,所述有用依赖项为所述软件项目运行时所述所有依赖项中使用到的依赖项;
当所述子树中存在有用依赖项时,为所述子树中存在的有用依赖项设置添加标记,其中,所述添加标记用于指示将所述子树从所述初始依赖关系树中删除后,将所述子树中存在的有用依赖项重新添加至删除所述子树后获得的第一目标依赖关系树中,以获得第二目标依赖关系树。
7.如权利要求6所述的方法,其特征在于,
所述删除标记包括第一删除标记和第二删除标记;
所述采用宽度优先遍历方式遍历所述初始依赖关系树,为所述初始依赖关系树中所述无用依赖项所在的节点设置删除标记,包括:
在采用宽度优先遍历方式遍历所述初始依赖关系树时,判断所述无用依赖项所在的节点是否属于所述初始依赖关系树中的一级子节点;
为属于所述初始依赖关系树中的一级子节点的无用依赖项设置所述第一删除标记;
为不属于所述初始依赖关系树中的一级子节点的无用依赖项设置所述第二删除标记,其中,所述第一删除标记和所述第二删除标记不同。
8.如权利要求6所述的方法,其特征在于,
所述预设处理包括:
将所述子树从所述初始依赖关系树中删除;
将所述子树从所述初始依赖关系树中删除后,将所述子树中存在的有用依赖项重新添加至所述第一目标依赖关系树中,以获得所述第二目标依赖关系树;以及
所述所有依赖项中各依赖项所在的节点属于所述初始依赖关系树中的任一级子节点。
9.一种无用依赖项检测装置,其特征在于,包括:
第一获取模块,用于获取软件项目运行时加载的目标类;
第二获取模块,用于从所述软件项目的配置文件中,获取所述软件项目的所有依赖项;
建立模块,用于根据所述所有依赖项,建立所述所有依赖项中各依赖项与其包含的各类的类名的预设对应关系;其中,所述各依赖项包含的各类包括所述目标类;
检测模块,用于根据所述目标类和所述预设对应关系,检测所述所有依赖项中的无用依赖项,其中,所述无用依赖项为所述软件项目运行时所述所有依赖项中使用不到的依赖项。
10.如权利要求9所述的装置,其特征在于,
所述建立模块包括:
第一获取子模块,用于获取所述各依赖项的档案文件;
第二获取子模块,用于将所述各依赖项的档案文件进行解压,获取所述各依赖项的档案文件中包含的各类的类名;
建立子模块,用于建立所述各依赖项与所述各依赖项的档案文件中包含的各类的类名之间的所述预设对应关系。
11.如权利要求10所述的装置,其特征在于,
所述检测模块包括:
第一确定子模块,用于确定所述预设对应关系中不与所述目标类的类名对应的依赖项;
第二确定子模块,用于将所述预设对应关系中,不与所述目标类的类名对应的依赖项确定为所述无用依赖项。
12.如权利要求9所述的装置,其特征在于,所述装置还包括:
生成模块,用于根据所述无用依赖项,生成依赖项处理方案;
所述生成模块包括:
第三获取子模块,用于从所述配置文件中获取所述所有依赖项形成的初始依赖关系树;
生成子模块,用于在所述初始依赖关系树的基础上,根据所述无用依赖项,生成所述依赖项处理方案,以调整所述初始依赖关系树。
13.如权利要求12所述的装置,其特征在于,所述装置还包括:
处理模块,用于根据所述依赖项处理方案,对所述所有依赖项进行预设处理,
所述处理模块包括:
第一处理子模块,用于根据所述依赖项处理方案,自动对所述所有依赖项进行所述预设处理;
或者
显示子模块,用于将所述依赖项处理方案进行显示;
第二处理子模块,用于当接收到根据所述依赖项处理方案对所述所有依赖项进行处理的处理命令时,根据所述处理命令,对所述所有依赖项进行所述预设处理。
14.如权利要求12或13所述的装置,其特征在于,
所述生成子模块包括:
第一设置单元,用于采用宽度优先遍历方式遍历所述初始依赖关系树,为所述初始依赖关系树中所述无用依赖项所在的节点设置删除标记;其中,所述删除标记用于指示将所述无用依赖项所在的节点所属的子树从所述初始依赖关系树中删除;
判断单元,用于判断所述子树中是否存在有用依赖项,其中,所述有用依赖项为所述软件项目运行时所述所有依赖项中使用到的依赖项;
第二设置单元,用于当所述子树中存在有用依赖项时,为所述子树中存在的有用依赖项设置添加标记,其中,所述添加标记用于指示将所述子树从所述初始依赖关系树中删除后,将所述子树中存在的有用依赖项重新添加至删除所述子树后获得的第一目标依赖关系树中,以获得第二目标依赖关系树。
15.如权利要求14所述的装置,其特征在于,
所述删除标记包括第一删除标记和第二删除标记;
所述第一设置单元包括:
第二判断子单元,用于在采用宽度优先遍历方式遍历所述初始依赖关系树时,判断所述无用依赖项所在的节点是否属于所述初始依赖关系树中的一级子节点;
第二设置子单元,用于为属于所述初始依赖关系树中的一级子节点的无用依赖项设置第一删除标记;
第三设置子单元,用于为不属于所述初始依赖关系树中的一级子节点的无用依赖项设置第二删除标记,其中,所述第一删除标记和所述第二删除标记不同。
CN201810474826.XA 2018-05-17 2018-05-17 一种无用依赖项检测方法及装置 Active CN108628751B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810474826.XA CN108628751B (zh) 2018-05-17 2018-05-17 一种无用依赖项检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810474826.XA CN108628751B (zh) 2018-05-17 2018-05-17 一种无用依赖项检测方法及装置

Publications (2)

Publication Number Publication Date
CN108628751A CN108628751A (zh) 2018-10-09
CN108628751B true CN108628751B (zh) 2021-06-11

Family

ID=63693655

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810474826.XA Active CN108628751B (zh) 2018-05-17 2018-05-17 一种无用依赖项检测方法及装置

Country Status (1)

Country Link
CN (1) CN108628751B (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109740127B (zh) * 2019-01-08 2023-05-26 武汉益模科技股份有限公司 一种基于三维模型的无序拆装方法
CN110059003B (zh) * 2019-03-20 2023-06-06 北京三快在线科技有限公司 自动化测试方法、装置、电子设备及可读存储介质
CN111241551B (zh) * 2019-09-19 2022-01-25 中国科学院信息工程研究所 基于缓存命中状态的处理器芯片假安全依赖冲突的识别方法
CN111104318B (zh) * 2019-12-12 2023-06-02 北京爱奇艺科技有限公司 一种单元测试结果的导出方法、装置及电子设备
CN110990296B (zh) * 2019-12-20 2023-10-13 抖音视界有限公司 类组件的识别方法及服务器、终端、存储介质
CN111162953B (zh) * 2019-12-31 2023-04-28 四川省公安科研中心 数据处理方法、系统升级方法和服务器
CN111679852B (zh) * 2020-05-29 2023-06-02 北京五八信息技术有限公司 一种冲突依赖库的检测方法及装置
CN112181858B (zh) * 2020-11-09 2021-12-31 东北大学 Java软件项目依赖冲突语义一致性的自动化检测方法
CN112559073B (zh) * 2020-12-16 2024-08-13 北京百度网讯科技有限公司 程序启动方法、类间关系构建方法及装置、移动终端
CN112799937B (zh) * 2021-01-13 2023-09-26 东北大学 基于GitHub自动化检测Maven项目中依赖冲突问题的方法
CN113076129B (zh) * 2021-03-23 2023-11-28 成都安恒信息技术有限公司 一种复杂配置依赖关系自动检查处理方法
CN113448928A (zh) * 2021-07-09 2021-09-28 网易(杭州)网络有限公司 文件清理方法、装置、处理器及电子装置
CN113971031A (zh) * 2021-10-28 2022-01-25 中国银行股份有限公司 软件包依赖关系检查方法及装置
CN117235167B (zh) * 2023-11-14 2024-01-30 戎行技术有限公司 一种应用于etl系统的任务流动态配置方法及系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103559132A (zh) * 2013-11-08 2014-02-05 北京京东尚科信息技术有限公司 一种java应用程序健壮性的检测方法和装置
CN104834528A (zh) * 2015-05-25 2015-08-12 北京京东尚科信息技术有限公司 依赖版本处理插件及采用其对依赖版本进行处理的方法
CN105630463A (zh) * 2014-10-28 2016-06-01 阿里巴巴集团控股有限公司 用于检测jar包冲突的方法及装置
CN106294160A (zh) * 2016-08-12 2017-01-04 福建天泉教育科技有限公司 检查依赖包合法性的方法及系统
US9606815B2 (en) * 2015-02-26 2017-03-28 International Business Machines Corporation API prioritization and detection

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103559132A (zh) * 2013-11-08 2014-02-05 北京京东尚科信息技术有限公司 一种java应用程序健壮性的检测方法和装置
CN105630463A (zh) * 2014-10-28 2016-06-01 阿里巴巴集团控股有限公司 用于检测jar包冲突的方法及装置
US9606815B2 (en) * 2015-02-26 2017-03-28 International Business Machines Corporation API prioritization and detection
CN104834528A (zh) * 2015-05-25 2015-08-12 北京京东尚科信息技术有限公司 依赖版本处理插件及采用其对依赖版本进行处理的方法
CN106294160A (zh) * 2016-08-12 2017-01-04 福建天泉教育科技有限公司 检查依赖包合法性的方法及系统

Also Published As

Publication number Publication date
CN108628751A (zh) 2018-10-09

Similar Documents

Publication Publication Date Title
CN108628751B (zh) 一种无用依赖项检测方法及装置
CN110162296B (zh) 应用程序编程接口文档的生成方法、装置及终端设备
CN106294134B (zh) 代码的崩溃定位方法及装置
CN106371997B (zh) 一种代码检查方法及装置
CN111367595B (zh) 数据处理方法、程序运行方法、装置及处理设备
CN107015986B (zh) 一种爬虫爬取网页的方法及装置
CN108427580B (zh) 配置对命名重复的检测方法、存储介质和智能设备
CN110826057A (zh) 数据处理路径的分析方法、计算机设备、存储介质
CN115292197A (zh) 一种软件测试方法、装置、电子设备及存储介质
CN114756872A (zh) 基于go语言的注入式污点数据跟踪方法、装置和电子装置
CN111240987A (zh) 移植程序检测方法、装置、电子设备及计算机可读存储介质
CN105354490B (zh) 一种处理被劫持浏览器的方法及设备
CN113626823A (zh) 一种基于可达性分析的组件间交互威胁检测方法及装置
CN115292203B (zh) 一种源代码分析方法及装置
CN111124545A (zh) 应用程序启动方法、装置、电子设备及存储介质
CN105243134A (zh) 一种处理被劫持浏览器的方法及设备
CN110795646A (zh) 请求处理方法、装置、电子设备和计算机可读存储介质
CN116451271A (zh) 一种应用软件的隐私政策自动提取方法
US8930420B2 (en) Orphan object tracking for objects having acquire-release semantics
CN109460255B (zh) 内存地址的查询方法及装置
CN110032366B (zh) 一种代码定位方法及装置
CN105205393A (zh) 一种处理被劫持浏览器的方法及设备
CN110990648A (zh) 一种病毒查询方法、服务器及计算机可读存储介质
CN110968821A (zh) 一种网址处理方法及装置
CN108153666B (zh) 一种静态检测安卓代码中的资源回收漏洞的方法和装置

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
GR01 Patent grant
GR01 Patent grant