Gerrit - 插件 gerrit-owners-autoassign-1.1 安装问题

Gerrit - plugin gerrit-owners-autoassign-1.1 install issue

我有以下堆栈跟踪:

[2015-10-15 19:29:09,264] WARN com.google.gerrit.server.plugins.PluginLoader : Cannot load plugin gerrit-owners-autoassign-1.1 com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: com/google/gerrit/extensions/events/GitReferenceUpdatedListener$Update at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201) at com.google.common.cache.LocalCache.get(LocalCache.java:3937) at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830) at com.google.inject.internal.FailableCache.get(FailableCache.java:48) at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:50) at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:136) at com.google.inject.internal.InjectorImpl.initializeBinding(InjectorImpl.java:533) at com.google.inject.internal.AbstractBindingProcessor$Processor.run(AbstractBindingProcessor.java:160) at com.google.inject.internal.ProcessedBindingData.initializeBindings(ProcessedBindingData.java:44) at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:123) at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107) at com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:226) at com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:233) at com.google.gerrit.server.plugins.ServerPlugin.startPlugin(ServerPlugin.java:190) at com.google.gerrit.server.plugins.ServerPlugin.start(ServerPlugin.java:170) at com.google.gerrit.server.plugins.PluginLoader.runPlugin(PluginLoader.java:461) at com.google.gerrit.server.plugins.PluginLoader.rescan(PluginLoader.java:390) at com.google.gerrit.server.plugins.PluginLoader.start(PluginLoader.java:295) at com.google.gerrit.lifecycle.LifecycleManager.start(LifecycleManager.java:74) at com.google.gerrit.pgm.Daemon.start(Daemon.java:293) at com.google.gerrit.pgm.Daemon.run(Daemon.java:205) at com.google.gerrit.pgm.util.AbstractProgram.main(AbstractProgram.java:64) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.google.gerrit.launcher.GerritLauncher.invokeProgram(GerritLauncher.java:166) at com.google.gerrit.launcher.GerritLauncher.mainImpl(GerritLauncher.java:93) at com.google.gerrit.launcher.GerritLauncher.main(GerritLauncher.java:50) at Main.main(Main.java:25) Caused by: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: com/google/gerrit/extensions/events/GitReferenceUpdatedListener$Update at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201) at com.google.common.cache.LocalCache.get(LocalCache.java:3937) at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830) at com.google.inject.internal.FailableCache.get(FailableCache.java:48) at com.google.inject.internal.MembersInjectorStore.get(MembersInjectorStore.java:68) at com.google.inject.internal.ConstructorInjectorStore.createConstructor(ConstructorInjectorStore.java:74) at com.google.inject.internal.ConstructorInjectorStore.access[=10=]0(ConstructorInjectorStore.java:29) at com.google.inject.internal.ConstructorInjectorStore.create(ConstructorInjectorStore.java:37) at com.google.inject.internal.ConstructorInjectorStore.create(ConstructorInjectorStore.java:33) at com.google.inject.internal.FailableCache.load(FailableCache.java:37) at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319) at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282) at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197) ... 31 more Caused by: java.lang.NoClassDefFoundError: com/google/gerrit/extensions/events/GitReferenceUpdatedListener$Update at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2615) at java.lang.Class.getDeclaredMethods(Class.java:1860) at com.google.inject.spi.InjectionPoint.getInjectionPoints(InjectionPoint.java:688) at com.google.inject.spi.InjectionPoint.forInstanceMethodsAndFields(InjectionPoint.java:380) at com.google.inject.internal.MembersInjectorStore.createWithListeners(MembersInjectorStore.java:93) at com.google.inject.internal.MembersInjectorStore.access[=10=]0(MembersInjectorStore.java:37) at com.google.inject.internal.MembersInjectorStore.create(MembersInjectorStore.java:45) at com.google.inject.internal.MembersInjectorStore.create(MembersInjectorStore.java:42) at com.google.inject.internal.FailableCache.load(FailableCache.java:37) at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319) at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282) at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197) ... 46 more Caused by: java.lang.ClassNotFoundException: com.google.gerrit.extensions.events.GitReferenceUpdatedListener$Update at java.net.URLClassLoader.run(URLClassLoader.java:366) at java.net.URLClassLoader.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 60 more

我不太确定我应该研究什么来修复它。

这看起来像是构建插件所针对的 API 版本与 Gerrit 服务器的 API 版本之间的不匹配。

java.lang.NoClassDefFoundError: com/google/gerrit/extensions/events/GitReferenceUpdatedListener$Update

GitReferenceUpdatedListener.Update class 是 removed from the API in Gerrit version 2.8

要解决此问题,您应该首先检查您的服务器是哪个版本的 Gerrit 运行,然后确保您已经针对 API 使用相应版本构建了插件。

我按照说明完成了编译插件,并在此处提交了两个更改:https://github.com/vadims/gerrit-owners/issues/6(查找 2 分叉回购)并且它确实有效。

这很痛苦,但插件做得很棒,值得付出努力!