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

使用ScriptRunner JQL查询超1年未更新问题数遇方法缺失错误求修复

修复Jira ScriptRunner查询更新超1年问题数量的Groovy脚本错误

问题场景

需要通过ScriptRunner脚本控制台查询Jira所有项目中最后更新时间超过1年的问题数量,原运行脚本时报错。

错误信息

groovy.lang.MissingMethodException: No signature of method: com.atlassian.jira.issue.search.providers.LuceneSearchProvider.search() is applicable for argument types: (com.atlassian.query.QueryImpl, com.atlassian.jira.user.DelegatingApplicationUser...) values: [{project = "EAP"} AND {updated < "2021-08-25"}, mouh(JIRAUSER59200), ...]
Possible solutions: search(com.atlassian.jira.issue.search.SearchQuery, com.atlassian.jira.web.bean.PagerFilter), search(com.atlassian.jira.issue.search.SearchQuery, com.atlassian.jira.web.bean.PagerFilter, java.util.Set), search(com.atlassian.jira.issue.search.SearchQuery, org.apache.lucene.search.Collector), each(groovy.lang.Closure)
at Script19999.run(Script19999.groovy:60)

修复方案

核心问题

新版本Jira的SearchProvider.search()方法不再支持直接传入Query、ApplicationUser和PagerFilter,需要将Query和用户封装为SearchQuery对象后传入。

具体修改点

  1. 修正SearchProvider调用方式:使用SearchQuery.create(query2, user)生成符合要求的参数
  2. 清理冗余导入:移除重复的类导入,简化代码结构
  3. 修复未定义变量:删除原代码中未定义的lastDate、results、admins变量,避免运行报错
  4. 动态计算1年前日期:替换硬编码日期为动态计算的1年前日期,提升脚本通用性

修改后的完整代码

import com.atlassian.jira.component.ComponentAccessor
import org.apache.log4j.Logger
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.jira.project.Project
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.issue.search.SearchQuery
import com.atlassian.jira.user.ApplicationUser

def log = Logger.getLogger("atlassian-jira.log")

// 获取所有项目
List<Project> prList = ComponentAccessor.getProjectManager().getProjectObjects()
def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
def searchProvider = ComponentAccessor.getComponent(SearchProvider)
ApplicationUser user = ComponentAccessor.jiraAuthenticationContext.getLoggedInUser()

// 计算1年前的日期,格式化为JQL支持的yyyy-MM-dd
def oneYearAgo = new Date() - 365
def dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd")
def formattedDate = dateFormat.format(oneYearAgo)

for(Project myproject : prList) {
    // 构建JQL查询:当前项目 + 更新时间早于1年前
    def query2 = jqlQueryParser.parseQuery("project = ${myproject.getKey()} and updated < '${formattedDate}'")
    
    // 用SearchQuery封装查询和用户,调用search方法
    def searchQuery = SearchQuery.create(query2, user)
    def results2 = searchProvider.search(searchQuery, PagerFilter.getUnlimitedFilter())
    
    // 输出日志,包含项目名称、问题数量、项目负责人
    log.warn("项目名称: ${myproject.getName()} ||| 超过1年未更新的问题数量: ${results2.total} ||| 项目负责人: ${myproject.getProjectLead()?.displayName ?: '无'}")
}

说明

  • 脚本会遍历所有Jira项目,输出每个项目中超过1年未更新的问题数量
  • 日期计算采用new Date() - 365,如果需要更精确的"一年前"(比如考虑闰年),可以用Calendar类来计算
  • 日志输出到Jira的atlassian-jira.log文件,可通过Jira日志管理查看

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:06:25