[发明专利]一种评估Maven环境中依赖冲突危险级别的方法有效
申请号: | 201810891476.7 | 申请日: | 2018-08-07 |
公开(公告)号: | CN108984416B | 公开(公告)日: | 2022-04-08 |
发明(设计)人: | 刘振伟;王蕊;杨博;王莹;于海;朱志良 | 申请(专利权)人: | 东北大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 沈阳东大知识产权代理有限公司 21109 | 代理人: | 刘晓岚 |
地址: | 110819 辽宁*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 评估 maven 环境 依赖 冲突 危险 级别 方法 | ||
1.一种评估Maven环境中依赖冲突危险级别的方法,其特征在于,包括流程如下,其中步骤3与步骤4不分先后顺序:
步骤1:获取到当前项目中使用的所有第三方依赖,包括直接依赖和间接依赖;
步骤2:对当前项目所有直接依赖和间接依赖进行遍历,识别当前项目中出现的所有依赖冲突;
步骤3:针对当前项目中的每个依赖冲突进行NoClass危险级别的评估;
步骤4:针对项目中的每个依赖冲突进行NoMethod危险级别的评估;
步骤5:对评估结果进行封装,向开发者展现评估结果;
所述进行NoClass危险级别的评估,流程包括步骤3.1~步骤3.6:
步骤3.1:识别出依赖冲突中用于编译当前项目的一个依赖UsedJar,其余没有用于编译当前项目的多个依赖NotUsedJar构成集合NotUsedJarSet,UsedJar中的类构成集合UsedJarClassSet,NotUsedJar内部的类构成集合NotUsedJarClassSet,如果有某个类存在于NotUsedJarClassSet却不存在于UsedJarClassSet,则将该冲突NoClass的危险级别设置为1;
步骤3.2:解析当前项目中所有被使用的jar包,得到当前项目和其第三方依赖中的类集合UsedClassSet;
步骤3.3:遍历当前NoClass危险级别为1的依赖冲突,如果有某个类Class存在于NotUsedJarClassSet却不存在于UsedClassSet,则将该类添加到该依赖冲突的ThrownClassSet中,并将该冲突NoClass的危险级别设置为2;
步骤3.4:根据类之间的ClassRef关系,建立类关系的有向图ClassGraph,有向图中的节点为类,边的起点和终点为引用类和被引用的类,边的权值全部为1;
步骤3.5:解析当前项目,获取当前项目的宿主类集合HostClassSet;
步骤3.6:遍历当前NoClass危险级别为2的依赖冲突:基于ClassGraph,每次以依赖冲突的ThrownClassSet中的一个类为起点,使用Dijkstra算法计算ThrownClass到图中其他节点的最短路径距离,如果依赖冲突的ThrownClassSet中的某个类与HostClassSet中的某个类的最短距离小于无穷大,则将该冲突NoClass的危险级别设置为3;
所述进行NoMethod危险级别的评估,流程包括步骤4.1~步骤4.3:
步骤4.1:遍历每个依赖冲突,识别出冲突中用于编译当前项目的一个依赖UsedJar,其余没有用于编译当前项目的多个依赖NotUsedJar构成集合NotUsedJarSet,分析UsedJar得到jar包中的类UsedJarClassSet,以及每个类包含的方法,再分析每个NotUsedJar得到jar包中的类集合NotUsedJarClassSet,以及每个类包含的方法,如果存在某个方法Method的类名既存在于UsedJarClassSet又存在于NotUsedJarClassSet,但是只有NotUsedJar中的类对该方法有实现,则将该方法加入到对应NotUsedJar的ThrownMethodSet中,并将对应的依赖冲突NoMethod的危险级别设置为1;
步骤4.2:遍历每个NoMethod危险级别为1的依赖冲突,对于依赖冲突中的每个NotUsedJar的ThrownMethodSet中的元素ThrownMethod,从ThrownMethod的方法名MethodName中提取类名ClassName,在UsedJar中名为ClassName的类定义为ClassA,如果ClassA的父类依然不存在对ThrownMethod的实现,则将对应的依赖冲突NoMethod的危险级别设置为2;
步骤4.3:遍历每个NoMethod危险级别为2的依赖冲突,构建方法调用关系的有向图MethodGraph,基于MethodGraph,计算以项目为入口被执行的方法集合ReachedMethodSet,如果ReachedMethodSet中有ThrownMethod则将对应的依赖冲突的危险级别设置为3。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于东北大学,未经东北大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810891476.7/1.html,转载请声明来源钻瓜专利网。