CN111736848A - 包冲突定位方法、装置、电子设备及可读存储介质 - Google Patents

包冲突定位方法、装置、电子设备及可读存储介质 Download PDF

Info

Publication number
CN111736848A
CN111736848A CN202010545063.0A CN202010545063A CN111736848A CN 111736848 A CN111736848 A CN 111736848A CN 202010545063 A CN202010545063 A CN 202010545063A CN 111736848 A CN111736848 A CN 111736848A
Authority
CN
China
Prior art keywords
packet
dependency
conflict
path
dependent
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.)
Granted
Application number
CN202010545063.0A
Other languages
English (en)
Other versions
CN111736848B (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 QIYI Century Science and Technology Co Ltd
Original Assignee
Beijing QIYI Century Science and 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 QIYI Century Science and Technology Co Ltd filed Critical Beijing QIYI Century Science and Technology Co Ltd
Priority to CN202010545063.0A priority Critical patent/CN111736848B/zh
Publication of CN111736848A publication Critical patent/CN111736848A/zh
Application granted granted Critical
Publication of CN111736848B publication Critical patent/CN111736848B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Abstract

本发明提供了一种包冲突定位方法、装置、电子设备及可读存储介质,属于计算机技术领域。该方法中,可以先获取目标代码的包冲突报错信息,在包冲突报错信息中包含报错路径的情况下,将报错路径分割为多个待选包路径。然后,根据预设对应关系以及待选包路径,确定待选包路径对应的版本信息的数量。最后,将对应的版本信息的数量大于预设阈值的待选包路径指示的依赖包,确定为冲突依赖包,输出冲突依赖包的依赖关系。这样,无需手动查找,即可自动定位出导致出现冲突的依赖包,这样,一定程度上可以降低冲突定位所耗费的人工成本,提高定位效率。

Description

包冲突定位方法、装置、电子设备及可读存储介质
技术领域
本发明属于计算机技术领域,特别是涉及一种包冲突定位方法、装置、电子设备及可读存储介质。
背景技术
为了提高代码的编写效率,经常会将已有的类打包生成iar包,在代码中插入jar包,以方便代码运行时候直接使用。这些插入代码的jar包即为代码中包含的依赖包。由于依赖包中可能会包含其他依赖包,即,各个依赖包之间可能会存在依赖关系,这样,就会导致代码中往往会存在多个依赖包。示例的,假设代码中引入了依赖包A,而A中包含对B的依赖,B中包含对C的依赖,那么代码就会引入3个依赖包。进一步地,代码运行时,可能会调用某个依赖包中提供的方法,而一个依赖包可能会有多个版本,这样,在代码中包含的依赖包中存在多个版本的同一依赖包时,例如,包含版本为1.0的依赖包A、版本为2.0的依赖包A以及版本为3.0的依赖包A,可能就会出现依赖包冲突。因此,如何定位包冲突成为亟需解决的问题。
现有技术中,往往是人工根据经验对输出的冲突报错信息进行分析,然后去手动查找定位。但是由于代码中包含多个依赖包,因此这种人工查找的方式,耗费的成本较大,且效率较低。
发明内容
本发明提供一种包冲突定位方法、装置、电子设备及可读存储介质,以便解决人工定位冲突时,耗费的成本较大,效率较低的问题。
在本发明实施的第一方面,首先提供了一种包冲突定位方法,所述方法包括:
获取目标代码的包冲突报错信息;
在所述包冲突报错信息中包含报错路径的情况下,将所述包冲突报错路径分割为多个待选包路径;
根据预设对应关系以及所述待选包路径,确定所述待选包路径对应的版本信息的数量;
将对应的版本信息的数量大于预设阈值的待选包路径指示的依赖包,确定为冲突依赖包;所述预设对应关系用于表征所述目标代码中依赖包的包路径与所述依赖包的版本信息之间的对应关系;所述包路径用于指示所述依赖包的存储位置;
输出所述冲突依赖包的依赖关系。
在本发明实施的第二方面,还提供了一种包冲突定位装置,该装置包括:
第一获取模块,用于获取目标代码的包冲突报错信息;
分割模块,用于在所述包冲突报错信息中包含报错路径的情况下,将所述包冲突报错路径分割为多个待选包路径;
第一确定模块,用于根据预设对应关系以及所述待选包路径,确定所述待选包路径对应的版本信息的数量;
第二确定模块,用于将对应的版本信息的数量大于预设阈值的待选包路径指示的依赖包,确定为冲突依赖包;所述预设对应关系用于表征所述目标代码中依赖包的包路径与所述依赖包的版本信息之间的对应关系;所述包路径用于指示所述依赖包的存储位置;
输出模块,用于输出所述冲突依赖包的依赖关系。
在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述任一所述的包冲突定位方法。
在本发明实施的又一方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的包冲突定位方法。
本发明实施例提供的包冲突定位方法,可以先获取目标代码的包冲突报错信息,在包冲突报错信息中包含报错路径的情况下,将报错路径分割为多个待选包路径。然后,根据预设对应关系以及待选包路径,确定待选包路径对应的版本信息的数量。最后,将对应的版本信息的数量大于预设阈值的待选包路径指示的依赖包,确定为冲突依赖包,输出冲突依赖包的依赖关系。这样,无需手动查找,即可自动定位出导致出现冲突的依赖包,这样,一定程度上可以降低冲突定位所耗费的人工成本,提高定位效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1是本发明实施例提供的一种包冲突定位方法的步骤流程图;
图2是本发明实施例提供的一种应用流程示意图;
图3是本发明实施例提供的另一种应用流程示意图;
图4是本发明实施例提供的一种包冲突定位装置的框图;
图5是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
首先,对本发明实施例针对的一种实际应用场景进行说明。为了提高代码的编写效率,越来越多的代码中会引入依赖包。由于调用依赖包提供的方法时,可能会出现冲突,因此,为了避免依赖包之间的冲突,可以通过依赖包的包路径进行调用。每个包可以对应不同包路径。其中,包路径可以用于指示依赖包的存储位置,通过存储位置可以访问,定位依赖包。示例的,包路径可以是通过域名设置的,这样,通过依赖包的包域名路径约束,一定程度上可以确保编译器能够正确的使用不同依赖包下同名的类。
但是代码中可能会存在不同版本的同一依赖包。示例的,假设代码中包含依赖包A和依赖包E。依赖包A中包含对依赖包B的依赖,依赖包B中包含对依赖包C的依赖,依赖包C中包含对依赖包D的依赖。依赖包E中包含对依赖包F的依赖,依赖包F中包含对依赖包D的依赖。其中,依赖包C中包含的是版本为16.1的依赖包D,而依赖包F中包含的是版本为16.0的依赖包D。即,代码中包含了不同版本的依赖包D。由于版本不同,两者包含的方法可能不同。例如,版本为16.1的依赖包D可能包含新增加的方法1,而版本为16.0的依赖包D并没有方法1。这样,由于版本为16.0的依赖包D并没有方法1,就是导致编译器无法从版本为16.0的依赖包D调用到方法1,进而会导致编译器报错,输出冲突报错信息。
为了定位这种由于同一依赖包的不同版本之间导致的包冲突,本发明实施例提供了一种包冲突定位方法。下面对该包冲突定位方法进行详细说明。
图1是本发明实施例提供的一种包冲突定位方法的步骤流程图,如图1所示,该方法可以包括:
步骤101、获取目标代码的包冲突报错信息。
本发明实施例中,目标代码可以是包含依赖包的代码。获取目标代码的包冲突报错信息时,可以直接读取目标代码时产生的包冲突报错信息。
步骤102、在所述包冲突报错信息中包含报错路径的情况下,将所述包冲突报错信息分割为多个待选包路径。
实际应用场景中,冲突报错信息可能会包含造成冲突的依赖包的包路径。但是因为冲突报错信息内容往往比较复杂,如果通过人工分析的方式,确定导致冲突的依赖包的包路径,就会耗费大量的人工成本。因此,本步骤中可以基于冲突报错信息生成可能是导致冲突的依赖包的包路径,作为待选包路径。通过后续步骤,从中自动查找导致冲突的依赖包的包路径,以降低人工成本。同时,本发明实施例中,通过在包冲突报错信息中包含报错路径的情况下,才对报错信息进行分割,并通过后续步骤定位包冲突,这样可以避免在报错信息中包含报错路径的情况下,对报错信息执行不必要的操作,进而一定程度上提高操作效率。
步骤103、根据预设对应关系以及所述待选包路径,确定所述待选包路径对应的版本信息的数量;所述预设对应关系用于表征所述目标代码中依赖包的包路径与所述依赖包的版本信息之间的对应关系。
本步骤中,预设对应关系中可以包含该目标代码中包含的各个依赖包的包路径对应的版本信息,版本信息可以版本号。该对应关系可以是在执行本步骤之前预先生成的,也可以是在执行本步骤时执行的。进一步地,如果依赖包的包路径对应多个版本信息,则可以认为该依赖包可能对应多个版本,该依赖包有可能导致冲突。因此,本步骤中,可以先根据该预设对应关系确定出待选包路径对应的版本信息的数量,进而方便后续步骤中,确定该待选包路径是否为导致冲突的依赖包的路径。
本步骤中,对于任一待选包路径,可以从该对应关系中进行查找,以确定是否该对应关系中与该待选包路径相匹配的包路径,然后,将该相匹配的包路径对应的版本信息的数量确定为该待选包路径对应的版本信息的数量。
步骤104、将对应的版本信息的数量大于预设数量阈值的待选包路径指示的依赖包,确定为冲突依赖包;所述包路径用于指示所述依赖包的存储位置。
本发明实施例中,该预设数量阈值可以是根据实际需求设置,示例的,设置该预设数量阈值时,可以先统计多次历史冲突中导致冲突的依赖包对应的版本信息的数量,然后取这些版本信息的数量的平均值作为预设数量阈值。如果待选包路径对应的版本信息的数量大于预设数量阈值,则可以认为该待选包路径所指示的依赖包是造成冲突包,因此,可以将其作为冲突依赖包。示例的,该预设数量阈值可以为1,如果版本数量大于1则可以认为冲突很大概率是该依赖包导致的,因此可以将该依赖包确定为冲突依赖包。
步骤105、输出所述冲突依赖包的依赖关系。
进一步地,由于该冲突依赖包可能存在多重依赖关系,即,被多个依赖包层层包含,因此,本步骤中,还可以输出冲突依赖包的依赖关系。这样,无需用户进行手动操作,即可便捷的获知冲突依赖包的依赖关系,进而一定程度上可以进一步降低人工成本,提高效率。
综上所述,本发明实施例提供的包冲突定位方法,可以先获取目标代码的包冲突报错信息,在包冲突报错信息中包含报错路径的情况下,将报错路径分割为多个待选包路径。然后,根据预设对应关系以及待选包路径,确定待选包路径对应的版本信息的数量。最后,将对应的版本信息的数量大于预设阈值的待选包路径指示的依赖包,确定为冲突依赖包,输出冲突依赖包的依赖关系。这样,无需手动查找,即可自动定位出导致出现冲突的依赖包,这样,一定程度上可以降低冲突定位所耗费的人工成本,提高定位效率。
可选的,本发明实施例中,可以通过下述步骤A~步骤D实现构建预设对应关系:
步骤A、获取所述目标代码对应的依赖树;所述依赖树中包含的节点表示依赖包,各个节点之间的连接关系符合各个节点表示的依赖包之间的依赖关系。
本步骤可以是在运行目标代码之前执行的,依赖树中可以包含多个节点,一个节点表示一个依赖包。具体的,可以通过运行预设命令来实现获取依赖树。示例的,以目标代码为基于spring boot,通过pom文件maven管理为例。该预设命令可以为预设的maven命令,示例的额,该maven命令可以为“mvn dependency:tree”。具体的,电子设备可以运行该命令,相应地,通过运行该命令,可以获取到完整的依赖树。
步骤B、对所述依赖树进行遍历,获取各个节点的节点标识信息,得到所述目标代码中的依赖包的包路径。
本步骤中,节点的节点标识信息可以是预先分配的,能够唯一表示该节点的信息,进一步地,依赖树中往往是使用该节点的包路径作为节点的标识信息。因此,本步骤中可以先按照依赖数的层级结构对依赖数中各个节点的信息进行加载,然后基于加载到的信息,依次从中获取节点的标识信息,最后,将该节点标识信息确定为依赖包的包路径。这样,通过遍历获取,一定程度上可以确保全面的获取到每个依赖包的包路径。其中,节点的标识信息可以是基于由该节点的maven groupId和artifactId构成的用预设运算符连接的字符串。maven groupId和artifactId可以是预先为每个依赖包分配的,该预设运算符可以为点运算符,这样可以在通过运算符进行分隔的同时,尽可能避免运算符所占的空间。示例的,该节点标识信息可以表示为“com.google.protobuf.protobuf-java”。
步骤C、对于所述目标代码中的任一依赖包,获取所述依赖包的版本信息。
本步骤中,对于目标代码中包含的任一依赖包,可以将该依赖包的标识信息与在依赖树中各个节点的标识信息进行比对,然后获取依赖树中相匹配的节点的标识信息对应的版本信息。示例的,依赖树中节点的节点信息中可以包括版本信息,相应地,可以从中提取版本信息。或者,也可以从预设的标识信息与版本信息对应关系,读取对应的版本信息。
步骤D、根据所述目标代码中包含的依赖包的包路径以及各个依赖包对应的版本信息,构建所述预设对应关系。
具体的,对于任一依赖包,可以以依赖包的包路径作为键(key),例如,可以将maven groupId和artifactId用点运算符连接的字符串:com.google.protobuf.protobuf-java作为key,然后将该依赖包对应的版本信息作为值(value),构建键值对(key-value)。最后,可以将所有键值对组合为预设对应关系。其中,该对应关系可以为一个多重映射(multimap)。需要说明的是,还可以在每次向目标代码中插入依赖包时,记录该依赖包的包路径和版本信息,然后根据记录的包路径和版本信息构建预设对应关系。进一步地,本发明实施例中,还可以统计各个依赖包对应的版本信息的数量,建立依赖包的包路径与依赖包的版本信息的数量的对应关系,进而方便根据对应关系确定待选包路径指示的依赖包对应的版本信息的数量。当然,也可以是通过对目标代码进行逻辑分析,确定出其中的依赖包以及对应的版本信息的数量,本发明实施例对此不做限定。
可选的,本发明实施例中,还可以在获取目标代码的包冲突报错信息之后,执行下述步骤E:
步骤E、在所述包冲突报错信息中包含报错路径,且不存在所述对应的版本信息的数量大于预设阈值的待选包路径的情况下,或者,在所述包冲突报错信息中未包含报错路径的情况下,确定所述预设对应关系中,满足对应的版本信息的数量大于所述预设阈值的冲突依赖包。
本发明实施例中,可以对包冲突报错信息进行格式分析,如果包冲突报错信息中包含符合路径格式的内容时,则可以认为包冲突报错信息中包含报错路径。反之,则可以认为包冲突报错信息中不包含报错路径,在包冲突报错信息中包含报错路径,且不存在对应的版本信息的数量大于预设阈值的待选包路径,或者,包冲突报错信息中未包含报错路径的情况下执行本步骤,可以通过预设对应关系,定位冲突依赖包,进而一定程度上确保包冲突定位方法的全面性。
具体在实现本步骤时,可以逐个统计预设对应关系中,每个依赖包对应的版本信息的数量是否大于预设数量阈值,如果是,则可以认该依赖包为风险依赖包,即,会导致包冲突的依赖包,因此,可以将该依赖包确定为冲突依赖包。
示例的,假设预设阈值为1,那么本步骤中可以从上述对应关系中查找对应的value的个数大于1的依赖包作为冲突依赖包。
可选的,本发明实施例中,步骤105可以包括下述子步骤(1)~子步骤(2)实现:
子步骤(1)、根据所述冲突依赖包在所述依赖树中的位置,向所述依赖树的根节点进行回溯,得到所述冲突依赖包对应的依赖关系。
具体的,进行回溯时,可以是利用预设的根节点回溯算法,从该冲突依赖包在依赖树中的位置依次向上一层的父节点进行回溯,即,反查依赖树。其中,每到达一个父节点,可以记录该父节点的节点信息,直至到达根节点位置。最后,可以将记录的各个节点的节点信息按照预设格式进行组合,进而得到依赖关系,其中该依赖关系可以体现该冲突包路径在目标代码中的依赖路径。其中,节点信息可以是能够表示该节点的信息,例如,包路径,等等。
本步骤中,通过向根节点进行回溯来获取冲突依赖包对应的依赖关系,可以确保获取到的关系的完整性。同时,通过先获取依赖树,直接基于获取到的依赖树进行回溯,获取依赖关系的方式,无需对代码进行检查分析,即可便捷的获取到依赖关系,进而一定程度上提高处理效率。
子步骤(2)、输出所述冲突依赖包的依赖关系。
本步骤中,由于依赖关系符合预设格式,因此,可以确保能够按照预设格式格式化输出该依赖关系,进而方便用户查看该依赖关系。输出依赖关系时,可以是在设备的屏幕上显示依赖关系,也可以是通过其它形式,例如,音视频播报或显示加播报的方式,等等。需要说明的是,本发明实施例中,还可以在运行目标代码之前,对目标代码进行编译时,直接将预设对应关系中,足对应的版本信息的数量大于所述预设阈值的依赖包作为风险依赖包,并输出风险依赖包的依赖关系以及冲突风险提示信息。该冲突风险提示信息可以用于提示这些风险依赖包的可能存在的潜在包依赖冲突风险,该提示信息可以为文字形式的提示信息,也可以是音频或视频形式的提示信息。本发明实施例中,通过在运行目标代码之前,预先确定可能会造成冲突的风险依赖包,并针对这些风险依赖包输出提示信息以及依赖关系。这样,通过预先给出风险警告,可以方便用户可以预先对这些风险依赖包进行处理,以规避风险。当然,本发明实施例中,也可以仅输出冲突风险提示信息,用户可以根据实际需求去确定依赖关系,这样,可以省略设备确定依赖关系的操作,进而一定程度上节省处理资源。
示例的,图2是本发明实施例提供的一种应用流程示意图,在图2所示的编译打包辅助流程中,可以先获取maven依赖树,然后遍历树并构造multimap,定位多值map,即multimap,的key和value。其中,定位key和value的过程指的是确定风险依赖包的过程。接着,可以反查maven依赖树,最后,输出多值key的完整依赖路径,即,风险依赖包的完整依赖关系。
可选的,本发明实施例在生成待选包路径时,可以按照预设规则,对冲突报错信息进行分割,得到多个待选包路径。由于冲突报错信息中往往包含造成冲突的依赖包的包路径,因此,可以通过分割得到多个待选包路径,以方便从中确定造成冲突的依赖包的包路径。其中,该预设规则可以是根据实际情况设置,示例的,该预设规则可以为按照每个分隔符执行一次划分,也可以是按照每个字符执行一次划分,等等。示例的,假设冲突报错信息为:org.apache.rocketmq.rocketmq-client.DefaultMq.setToken(String)method notfound。那么可以针对每个点操作符进行一次分割,得到如下几种可能的待选包路径:
(A)org.apache.rocketmq,rocketmq-client.Defaultmq
(B)org.apache.rocketmq.rocketmq-client
(C)org.apache.rocketmq
(D)org.apache
(E)org
可选的,本发明实施例中还可以进一步:确定所述冲突依赖包对应的所有版本号;将版本号最新的冲突依赖包作为目标冲突依赖包,将除所述目标冲突依赖包之外的冲突依赖包移除。具体的,确定版本号时,可以从预先存储的版本号信息中获取该冲突依赖包对应的所有版本号,然后将除最新版本之外的冲突依赖包移除(exclude)。这样,通过在确定出冲突依赖包之后,通过仅保留最新版本依赖包,移除其他版本依赖包,无需用户手动处理,即可解决冲突问题,避免后续继续出现冲突。同时,通过保留最新版本的依赖包,可以提高后续使用该依赖包时的效果。进一步地,本发明实施例中,也可以显示移除提醒信息,即,给出用户解决方法。在接收到用户的确认操作之后,再执行移除操作,进而避免执行不符合用户需求的操作。
示例的,图3是本发明实施例提供的另一种应用流程示意图,在图3所示的运行出错定位流程中,可以先获取maven依赖树,然后遍历树并构造multimap,接着,输入运行出错信息,即,冲突报错信息。根据出错信息和multimap key定位冲突包路径,即,确定冲突风险包。接着,可以反查maven依赖关系。
图4是本发明实施例提供的一种包冲突定位装置的框图,如图4所示,该装置40可以包括:
第一获取模块401,用于获取目标代码的包冲突报错信息.
分割模块402,用于在所述包冲突报错信息中包含报错路径的情况下,将所述包冲突报错路径分割为多个待选包路径。
第一确定模块403,用于根据预设对应关系以及所述待选包路径,确定所述待选包路径对应的版本信息的数量。
第二确定模块404,用于将对应的版本信息的数量大于预设阈值的待选包路径指示的依赖包,确定为冲突依赖包;所述预设对应关系用于表征所述目标代码中依赖包的包路径与所述依赖包的版本信息之间的对应关系;所述包路径用于指示所述依赖包的存储位置。
输出模块405,用于输出所述冲突依赖包的依赖关系。
可选的,所述装置40还包括:
第三确定模块,用于在所述包冲突报错信息中包含报错路径,且不存在所述对应的版本信息的数量大于预设阈值的待选包路径的情况下,或者,在所述包冲突报错信息中未包含报错路径的情况下,确定所述预设对应关系中,满足对应的版本信息的数量大于所述预设阈值的冲突依赖包。
可选的,所述装置40还包括:
第二获取模块,用于获取所述目标代码对应的依赖树;所述依赖树中包含的节点表示依赖包,各个节点之间的连接关系符合各个节点表示的依赖包之间的依赖关系。
遍历模块,用于对所述依赖树进行遍历,获取各个节点的节点标识信息,得到所述目标代码中的依赖包的包路径。
第三获取模块,用于对于所述目标代码中的任一依赖包,获取所述依赖包的版本信息。
构建模块,用于根据所述目标代码中的依赖包的包路径以及各个依赖包对应的版本信息,构建所述预设对应关系。
可选的,所述输出模块405,具体用于:
根据所述冲突依赖包在所述依赖树中的位置,向所述依赖树的根节点进行回溯,得到所述冲突依赖包对应的依赖关系。
输出所述冲突依赖包的依赖关系。
可选的,所述版本信息为版本号;所述装置40还包括:
确定所述冲突依赖包对应的所有版本号。
将版本号最新的冲突依赖包作为目标冲突依赖包,将除所述目标冲突依赖包之外的冲突依赖包移除。
综上所述,本发明实施例提供的包冲突定位装置,可以先获取目标代码的包冲突报错信息,在包冲突报错信息中包含报错路径的情况下,将报错路径分割为多个待选包路径。然后,根据预设对应关系以及待选包路径,确定待选包路径对应的版本信息的数量。最后,将对应的版本信息的数量大于预设阈值的待选包路径指示的依赖包,确定为冲突依赖包,输出冲突依赖包的依赖关系。这样,无需手动查找,即可自动定位出导致出现冲突的依赖包,这样,一定程度上可以降低冲突定位所耗费的人工成本,提高定位效率。对于上述装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明实施例还提供了一种电子设备,如图5所示,包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信,
存储器503,用于存放计算机程序;
处理器501,用于执行存储器503上所存放的程序时,实现如下步骤:
获取目标代码的包冲突报错信息;
在所述包冲突报错信息中包含报错路径的情况下,将所述包冲突报错路径分割为多个待选包路径;
根据预设对应关系以及所述待选包路径,确定所述待选包路径对应的版本信息的数量;
将对应的版本信息的数量大于预设阈值的待选包路径指示的依赖包,确定为冲突依赖包;所述预设对应关系用于表征所述目标代码中依赖包的包路径与所述依赖包的版本信息之间的对应关系;所述包路径用于指示所述依赖包的存储位置;
输出所述冲突依赖包的依赖关系。
上述终端提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述终端与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的包冲突定位方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的包冲突定位方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (10)

1.一种包冲突定位方法,其特征在于,所述方法包括:
获取目标代码的包冲突报错信息;
在所述包冲突报错信息中包含报错路径的情况下,将所述包冲突报错路径分割为多个待选包路径;
根据预设对应关系以及所述待选包路径,确定所述待选包路径对应的版本信息的数量;
将对应的版本信息的数量大于预设阈值的待选包路径指示的依赖包,确定为冲突依赖包;所述预设对应关系用于表征所述目标代码中依赖包的包路径与所述依赖包的版本信息之间的对应关系;所述包路径用于指示所述依赖包的存储位置;
输出所述冲突依赖包的依赖关系。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述包冲突报错信息中包含报错路径,且不存在所述对应的版本信息的数量大于预设阈值的待选包路径的情况下,或者,在所述包冲突报错信息中未包含报错路径的情况下,确定所述预设对应关系中,满足对应的版本信息的数量大于所述预设阈值的冲突依赖包。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
获取所述目标代码对应的依赖树;所述依赖树中包含的节点表示依赖包,各个节点之间的连接关系符合各个节点表示的依赖包之间的依赖关系;
对所述依赖树进行遍历,获取各个节点的节点标识信息,得到所述目标代码中的依赖包的包路径;
对于所述目标代码中的任一依赖包,获取所述依赖包的版本信息;
根据所述目标代码中的依赖包的包路径以及各个依赖包对应的版本信息,构建所述预设对应关系。
4.根据权利要求3所述的方法,其特征在于,所述输出所述冲突依赖包的依赖关系,包括:
根据所述冲突依赖包在所述依赖树中的位置,向所述依赖树的根节点进行回溯,得到所述冲突依赖包对应的依赖关系;
输出所述冲突依赖包的依赖关系。
5.根据权利要求1所述的方法,其特征在于,所述版本信息为版本号;所述方法还包括:
确定所述冲突依赖包对应的所有版本号;
将版本号最新的冲突依赖包作为目标冲突依赖包,将除所述目标冲突依赖包之外的冲突依赖包移除。
6.一种包冲突定位装置,其特征在于,所述装置包括:
第一获取模块,用于获取目标代码的包冲突报错信息;
分割模块,用于在所述包冲突报错信息中包含报错路径的情况下,将所述包冲突报错路径分割为多个待选包路径;
第一确定模块,用于根据预设对应关系以及所述待选包路径,确定所述待选包路径对应的版本信息的数量;
第二确定模块,用于将对应的版本信息的数量大于预设阈值的待选包路径指示的依赖包,确定为冲突依赖包;所述预设对应关系用于表征所述目标代码中依赖包的包路径与所述依赖包的版本信息之间的对应关系;所述包路径用于指示所述依赖包的存储位置;
输出模块,用于输出所述冲突依赖包的依赖关系。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
第三确定模块,用于在所述包冲突报错信息中包含报错路径,且不存在所述对应的版本信息的数量大于预设阈值的待选包路径的情况下,或者,在所述包冲突报错信息中未包含报错路径的情况下,确定所述预设对应关系中,满足对应的版本信息的数量大于所述预设阈值的冲突依赖包。
8.根据权利要求6或7所述的装置,其特征在于,所述装置还包括:
第二获取模块,用于获取所述目标代码对应的依赖树;所述依赖树中包含的节点表示依赖包,各个节点之间的连接关系符合各个节点表示的依赖包之间的依赖关系;
遍历模块,用于对所述依赖树进行遍历,获取各个节点的节点标识信息,得到所述目标代码中的依赖包的包路径;
第三获取模块,用于对于所述目标代码中的任一依赖包,获取所述依赖包的版本信息;
构建模块,用于根据所述目标代码中的依赖包的包路径以及各个依赖包对应的版本信息,构建所述预设对应关系。
9.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-5任一所述的方法步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5中任一所述的方法。
CN202010545063.0A 2020-06-15 2020-06-15 包冲突定位方法、装置、电子设备及可读存储介质 Active CN111736848B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010545063.0A CN111736848B (zh) 2020-06-15 2020-06-15 包冲突定位方法、装置、电子设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010545063.0A CN111736848B (zh) 2020-06-15 2020-06-15 包冲突定位方法、装置、电子设备及可读存储介质

Publications (2)

Publication Number Publication Date
CN111736848A true CN111736848A (zh) 2020-10-02
CN111736848B CN111736848B (zh) 2023-08-22

Family

ID=72649258

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010545063.0A Active CN111736848B (zh) 2020-06-15 2020-06-15 包冲突定位方法、装置、电子设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN111736848B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024016729A1 (zh) * 2022-07-21 2024-01-25 华为云计算技术有限公司 调用冲突的可视化方法及装置

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6981110B1 (en) * 2001-10-23 2005-12-27 Stephen Waller Melvin Hardware enforced virtual sequentiality
CN102073582A (zh) * 2010-07-30 2011-05-25 兰雨晴 基于冲突的软件包依赖关系检查方法
US20130227542A1 (en) * 2012-02-28 2013-08-29 International Business Machines Corporation Version conflict checking to installable unit
US20160261459A1 (en) * 2013-10-14 2016-09-08 Hewlett-Packard Development Company, L.P. Package dependency maps for distributed computing
CN110245279A (zh) * 2019-05-06 2019-09-17 阿里巴巴集团控股有限公司 依赖树生成方法、装置、设备及存储介质
US20190339966A1 (en) * 2018-05-06 2019-11-07 Methodics, Inc. Component design security through restriction of a design component dependency tree
US20190339967A1 (en) * 2018-05-06 2019-11-07 Methodics, Inc. Design component dependency tree normalization through automatic conflict resolution and/or contextual dependency
CN110825377A (zh) * 2018-08-07 2020-02-21 北京国双科技有限公司 一种依赖冲突分析方法及装置
CN111198708A (zh) * 2018-11-16 2020-05-26 北京奇虎科技有限公司 一种jar包冲突解决方法和装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6981110B1 (en) * 2001-10-23 2005-12-27 Stephen Waller Melvin Hardware enforced virtual sequentiality
CN102073582A (zh) * 2010-07-30 2011-05-25 兰雨晴 基于冲突的软件包依赖关系检查方法
US20130227542A1 (en) * 2012-02-28 2013-08-29 International Business Machines Corporation Version conflict checking to installable unit
US20160261459A1 (en) * 2013-10-14 2016-09-08 Hewlett-Packard Development Company, L.P. Package dependency maps for distributed computing
US20190339966A1 (en) * 2018-05-06 2019-11-07 Methodics, Inc. Component design security through restriction of a design component dependency tree
US20190339967A1 (en) * 2018-05-06 2019-11-07 Methodics, Inc. Design component dependency tree normalization through automatic conflict resolution and/or contextual dependency
CN110825377A (zh) * 2018-08-07 2020-02-21 北京国双科技有限公司 一种依赖冲突分析方法及装置
CN111198708A (zh) * 2018-11-16 2020-05-26 北京奇虎科技有限公司 一种jar包冲突解决方法和装置
CN110245279A (zh) * 2019-05-06 2019-09-17 阿里巴巴集团控股有限公司 依赖树生成方法、装置、设备及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024016729A1 (zh) * 2022-07-21 2024-01-25 华为云计算技术有限公司 调用冲突的可视化方法及装置

Also Published As

Publication number Publication date
CN111736848B (zh) 2023-08-22

Similar Documents

Publication Publication Date Title
CN107092491B (zh) 一种配置加载方法和系统
CN112181430A (zh) 代码变更统计方法、装置、电子设备及存储介质
CN111124480B (zh) 应用程序包的生成方法、装置、电子设备及存储介质
CN111078276B (zh) 应用程序的冗余资源处理方法、装置、设备及存储介质
US11422917B2 (en) Deriving software application dependency trees for white-box testing
CN111984264A (zh) 一种静态库的生成方法和装置
CN110719200A (zh) 信息识别方法和装置
CN111736848B (zh) 包冲突定位方法、装置、电子设备及可读存储介质
CN111399849B (zh) 一种应用程序安装包的确定方法及系统
CN111240987B (zh) 移植程序检测方法、装置、电子设备及计算机可读存储介质
CN111767213A (zh) 数据库检查点的测试方法、装置、电子设备及存储介质
CN109672608B (zh) 根据时间发送消息的方法
CN116775488A (zh) 异常数据确定方法、装置、设备、介质及产品
CN115421831A (zh) 生成活动组件调用关系的方法、装置、设备及存储介质
CN113037521B (zh) 识别通讯设备状态的方法、通讯系统及存储介质
CN112433943A (zh) 基于抽象语法树的环境变量检测方法、装置、设备及介质
CN112148721A (zh) 数据检核方法、装置、电子设备及存储介质
CN111726373B (zh) 通信链路构建方法、装置和设备
CN111258899A (zh) 用例生成方法、装置、电子设备和计算机可读存储介质
CN117290253B (zh) 代码测试方法、装置、通信设备及存储介质
US20220405095A1 (en) Method, device, and program product for managing object in software development project
CN112181539B (zh) 文件处理方法、装置、设备及介质
CN115344297A (zh) 配置数据的查找方法、存储介质及电子装置
CN113760863A (zh) 数据库的配置方法、装置、计算机设备和可读存储介质
CN117573130A (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