【技术实现步骤摘要】
一种评估Maven环境中依赖冲突危险级别的方法
本专利技术涉及软件可靠性领域,特别涉及一种评估Maven环境中依赖冲突危险级别的方法。
技术介绍
在软件开发的过程中,经常会使用第三方开源项目进行软件复用来减少开发成本。Apache组织开发维护的Maven是用java编写的开源项目的管理工具。使用maven进行项目开发可以通过xml形式的pom文件导入及管理项目的依赖。但是在Maven的构建环境中,由于同一个开源项目存在多个版本、maven的依赖管理又存在依赖传递机制,经常会导致项目中出现依赖冲突现象,产生软件缺陷。在软件测试不充分的情况下,这种软件缺陷可能会在软件运行的时候产生开发者意想不到的xx-not-found-bug,主要表现形式包括:java.lang.NoClassDefFoundError、java.lang.ClassNotFoundException、java.lang.NoSuchMethodError和java.lang.NoSuchMethodException。Maven本身虽然可以检测依赖冲突,但缺乏有效的机制对依赖冲突进行评估。Java虚拟机中定义的Class格式文件是编译java类文件后产生的字节码,每一个Class文件都对应着唯一一个类或接口的定义信息,java类文件中的属性、方法,以及类中的常量信息,都会被存储在.class文件中。相对于易于程序员读写java文件,class文件的格式被更加严格的定义,更易于被程序分析。目前有asm、Javassist等流行的工具可以在class形式的字节码文件进行操作,进行java类的 ...
【技术保护点】
1.一种评估Maven环境中依赖冲突危险级别的方法,其特征在于,包括流程如下,其中步骤3与步骤4不分先后顺序:步骤1:获取到当前项目中使用的所有第三方依赖,包括直接依赖和间接依赖;步骤2:对当前项目所有直接依赖和间接依赖进行遍历,识别当前项目中出现的所有依赖冲突;步骤3:针对当前项目中的每个依赖冲突进行NoClass危险级别的评估;步骤4:针对项目中的每个依赖冲突进行NoMethod危险级别的评估;步骤5:对评估结果进行封装,向开发者展现评估结果。
【技术特征摘要】
1.一种评估Maven环境中依赖冲突危险级别的方法,其特征在于,包括流程如下,其中步骤3与步骤4不分先后顺序:步骤1:获取到当前项目中使用的所有第三方依赖,包括直接依赖和间接依赖;步骤2:对当前项目所有直接依赖和间接依赖进行遍历,识别当前项目中出现的所有依赖冲突;步骤3:针对当前项目中的每个依赖冲突进行NoClass危险级别的评估;步骤4:针对项目中的每个依赖冲突进行NoMethod危险级别的评估;步骤5:对评估结果进行封装,向开发者展现评估结果。2.根据权利要求1所述一种评估Maven环境中依赖冲突危险级别的方法,其特征在于,所述进行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。3.根据权利要求1所述一种评估Maven环境中依赖冲突危险级别的方法,其特征在于,所述进行NoMethod危险级别的评估,流程包括步骤4.1~步骤4.3:步骤4.1:遍历每个依赖冲突,识别出冲突中用于编译当前项目的一个依赖UsedJar,其余没有用于编译当前项目的多个依赖NotUsedJar构成集合NotUsedJarSet,分析UsedJ...
【专利技术属性】
技术研发人员:刘振伟,王蕊,杨博,王莹,于海,朱志良,
申请(专利权)人:东北大学,
类型:发明
国别省市:辽宁,21
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。