You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历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 
}

关键修改点说明

  1. 将triggermap初始化移到循环外:这样整个循环过程中使用的是同一个Map实例,不会每次循环都被重置为空。
  2. 用putAll()合并条目:每次处理完一个文件后,把当前文件对应的触发条目合并到总Map中,实现条目累积的效果。
  3. 调整回退逻辑的位置:回退只在所有文件处理完成后、且没有任何匹配条目时触发,避免每次循环都覆盖已累积的结果。

运行后的输出

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:12:38