遍历SCM变更文件生成Map时如何避免条目覆盖并配置回退
解决Groovy Map累积条目被覆盖的问题
你的问题核心在于每次循环都重新创建并赋值triggermap,导致之前累积的条目被完全覆盖,没法保留历史结果。要实现条目累积,只需要调整Map的初始化位置和合并逻辑即可。
修改后的代码
ChangedFilesList = ["main/exporter/pom.xml", "main/app/download-server/pom.xml"] // 初始化空Map用于累积所有触发条目 def triggermap = [:] ChangedFilesList.each { println "Changes in file: ${it}" def file = "${it}" // 获取当前文件对应的触发条目 def currentTriggers = path2component.findAll{ file.find(it.key) }.collectEntries{ ["trigger-${it.value}", true] } // 如果当前文件有匹配的条目,合并到总Map中 if (currentTriggers) { triggermap.putAll(currentTriggers) } // 打印当前已累积的所有触发条目 println "triggermap:" + triggermap } // 循环结束后,若没有任何匹配的条目,启用回退逻辑 if (triggermap.isEmpty()) { triggermap = ["trigger-none": true] println "triggermap:" + triggermap }
关键修改点说明
- 将
triggermap初始化移到循环外:这样整个循环过程中使用的是同一个Map实例,不会每次循环都被重置为空。 - 用
putAll()合并条目:每次处理完一个文件后,把当前文件对应的触发条目合并到总Map中,实现条目累积的效果。 - 调整回退逻辑的位置:回退只在所有文件处理完成后、且没有任何匹配条目时触发,避免每次循环都覆盖已累积的结果。
运行后的输出
Changes in file: main/exporter/pom.xml triggermap:[trigger-rest-exporter:true] Changes in file: main/app/download-server/pom.xml triggermap:[trigger-rest-exporter:true, trigger-download-server:true]
这样就能完全符合你期望的累积效果了。
内容的提问来源于stack exchange,提问作者Shahar Hamuzim Rajuan
相关产品推荐
相关产品推荐

