Page 165 - 《软件学报》2025年第7期
P. 165
3086 软件学报 2025 年第 36 卷第 7 期
12) 类别 2.5 模块间库冲突 (如算法 A12 所示)
算法 A12. 模块间库冲突.
输入: BI: 基本信息;
输出: JS: 各模块间出现版本冲突的依赖库集合.
1. JS ⇐ {};
2. moduleDirectDepsVers ⇐ {}
3. for module ∈ BI.modules do
4. for dep ∈ resolveDepFile(module.depFile) do
5. moduleDirectDepsVers[dep.depName].insert(dep.depVer)
6. end for
7. end for
8. for conflictDep ∈ moduleDirectDepsCnt.keys do
9. if moduleDirectDepsVers[conlictDep].size() > 1 then
10. JS.add(conflictDep)
11. end if
12. end for
该算法接受基本信息 BI 作为输入, 并输出各模块间出现版本冲突的依赖库集合 JS. 算法的工作流程如下: 首
先, 初始化集合 JS 用于存储发生版本冲突的依赖库 (第 1 行). 接下来, 创建一个字典 moduleDirectDepsVers 用于
记录每个依赖库在各模块中的版本信息 (第 2 行). 算法遍历多模块项目中的每个模块 (第 3 行), 并对每个模块的
依赖文件调用 resolveDepFile 函数以解析其依赖 (第 4 行). 对于每个解析到的依赖 dep, 算法将其版本 dep.depVer
插入到字典 moduleDirectDepsVers 中, 使用依赖名称 dep.depName 作为键 (第 5 行). 完成模块遍历后, 算法遍历
moduleDirectDepsVers 字典中的每个依赖 conflictDep (第 8 行), 并检查该依赖的版本集合大小是否大于 1 (第 9
行). 如果条件满足, 算法将该依赖 conflictDep 添加至集合 JS 中 (第 10 行).
孙伟杰(2001-), 男, 博士生, CCF 学生会员, 主 王莹(1987-), 女, 博士, 副教授, 博士生导师,
要研究领域为开源治理技术. CCF 专业会员, 主要研究领域为开源治理技术,
软件测试及分析学.
许畅(1977-), 男, 博士, 教授, 博士生导师, CCF
高级会员, 主要研究领域为大数据软件工程, 智
能软件测试与分析, 自适应和自控软件系统.

