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

Jira脚本中newIssueproject.getVersions().contains(v)始终返回false的修复求助

问题

需求是仅当指定项目包含当前问题的相同版本时,才创建带-Inbox后缀的新版本,核心代码如下:

for( Version v: issue.getFixVersions()){
    if(newIssueproject.getVersions().contains(v)){
        Version mynewVersion= ComponentAccessor.versionManager.createVersion(v.getName()+"-Inbox", startDate, releaseDate, description, newIssueproject.id, scheduleAfterVersion, released)
        mynewVersions.add(mynewVersion)
    }
}

但if(newIssueproject.getVersions().contains(v))始终返回false,导致mynewVersions列表为空,无法生成预期的新版本。

问题原因

Jira中的Version对象是按实例判断相等性的:当前问题的v是原项目的Version实例,而newIssueproject.getVersions()返回的是目标项目的Version实例——哪怕两个版本名称完全一致,它们也是不同的对象,因此contains方法会判定为不相等,返回false。

修复方案

不要直接比较Version对象,而是通过版本名称来判断目标项目是否存在同名版本,具体步骤:

  1. 先提取目标项目所有版本的名称,存入一个Set(查询效率更高)
  2. 循环当前问题的FixVersions时,检查版本名称是否在目标项目的版本名称集合中

修改后的核心代码如下:

// 先提取目标项目的所有版本名称到Set
def targetVersionNames = newIssueproject.getVersions().collect { it.name } as Set

def mynewVersions = new ArrayList<Version>()
for(Version v : issue.getFixVersions()){
    // 用版本名称判断,而非对象实例
    if(targetVersionNames.contains(v.getName())){
        Version mynewVersion = ComponentAccessor.versionManager.createVersion(
            v.getName()+"-Inbox", 
            startDate, 
            releaseDate, 
            description, 
            newIssueproject.id, 
            scheduleAfterVersion, 
            released
        )
        mynewVersions.add(mynewVersion)
    }
}
newissue.setFixVersions(mynewVersions)

额外优化建议

  • 如果需要更严谨的判断(比如避免名称相同但其他属性不同的情况),可以结合版本的其他属性(如发布状态)一起判断,但通常名称匹配已经能满足需求
  • 可以添加日志打印,输出目标项目的版本名称集合和当前问题的版本名称,方便调试排查

内容的提问来源于stack exchange,提问作者منى

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:52:37