Jira中Table Grid插件Java API调用addRows方法报NoClassDefFoundError
问题根因
抛出java.lang.NoClassDefFoundError: com/atlassian/jira/projectconfig/fields/ScreenFinder和脚本本身的语法、API调用写法无关,属于类加载/版本兼容类问题,触发原因分为三类:
ScreenFinder是Jira 8.0及以上版本才提供的核心API类,如果你当前部署的Jira版本低于8.0,却安装了适配高版本Jira的Table Grid Next Generation(以下简称TNG)插件,插件运行时找不到这个依赖类就会抛出该错误。- ScriptRunner默认的脚本类加载器存在插件隔离机制,不会自动加载第三方插件的全量依赖链,哪怕你导入的
addRows方法代码完全和官方示例一致,执行到TNG内部调用ScreenFinder的逻辑时,会因为类加载域隔离找不到对应类定义。 - TNG插件安装异常、启动时部分模块未完成加载,内部类的依赖引用没有被正确解析,也会触发该错误。
修复方案
- 先完成版本兼容性校验
登录Jira管理员后台,进入「应用-管理应用」页面,找到已安装的TNG插件,核对插件标注的兼容Jira版本范围,确认和当前实例运行的Jira版本完全匹配。版本不匹配时,要么安装对应Jira版本支持的TNG历史版本,要么将Jira升级到TNG要求的最低版本以上。如果版本匹配,优先将TNG升级到最新稳定版,旧版本TNG存在已知的ScriptRunner调用类加载缺陷,会直接触发该报错。 - 调整ScriptRunner类加载配置
不要直接静态导入TNG类、手动new相关操作对象,改用ScriptRunner提供的插件依赖加载注解,强制脚本从TNG插件的类加载域加载所有依赖,绕过默认的类隔离限制,基础代码结构如下:import com.onresolve.scriptrunner.runner.customisers.WithPlugin // 指定TNG插件的bundle ID,强制从该插件上下文加载依赖 @WithPlugin("com.idalko.jira.plugins.igrid") // 后续通过@PluginModule注解注入需要的TNG服务实例,不要手动new对象 // 注入完成后再调用addRows方法即可 - 插件重载校验
完成上述配置后如果仍报错,在插件管理页面先禁用TNG插件,等待10秒后重新启用,查看插件启动日志确认所有模块都正常加载、无启动报错后,再重新执行脚本。 - 临时规避方案
如果Java API调用始终存在类加载冲突,可以直接调用TNG提供的公开REST接口实现表格行新增,完全绕开Java层的类加载问题,接口参数规则参考TNG自带的API说明文档即可。
内容的提问来源于stack exchange,提问作者Вахид Шукюров
相关产品推荐
相关产品推荐

