Gerrit从3.2.3升级到3.4.1启动报错NoClassDefFoundError:ChangeKeyAdapter
根因说明
该错误是Gerrit跨版本升级后,第三方插件与3.4.1核心版本不兼容导致的:com.google.gerrit.server.change.ChangeKeyAdapter是3.3版本后核心代码重构时移除的类,仍在使用的旧版本第三方插件会调用该类触发类加载异常。
解决步骤
- 先停止Gerrit服务,进入站点的插件目录:
cd ${MY-GerritSite}/plugins - 备份并移除所有非官方自带的第三方插件,避免直接删除导致配置丢失:
mkdir ~/gerrit_plugins_backup && mv *.jar ~/gerrit_plugins_backup/ - 重新执行3.4.1版本的初始化命令,确保官方核心依赖、自带插件都更新到匹配版本:
java -jar gerrit.3.4.1.jar init -d ${MY-GerritSite} --batch - 测试启动Gerrit:
若启动成功,再逐个下载与3.4.1版本严格匹配的第三方插件放回plugins目录,每次添加一个插件后重启验证无异常,再添加下一个。bash gerrit.sh run
额外排查点
- 若执行上述步骤后仍报错,检查站点目录下的
lib文件夹是否被手动修改过,备份后删除整个lib目录,重新执行init命令自动重建核心依赖库。 - 确认运行环境的Java版本为Java 11,Gerrit 3.4.1不支持Java 8、Java 17及以上版本,版本不符也会触发类加载异常。
- 检查
etc/gerrit.config中是否存在已废弃的日志模块、自定义插件相关配置,先注释相关配置项后再启动测试。
内容的提问来源于stack exchange,提问作者B.Kingsun
相关产品推荐
相关产品推荐

