Java 如何在gerrit插件中使用LifecycleListener?

Java 如何在gerrit插件中使用LifecycleListener?,java,guice,gerrit,Java,Guice,Gerrit,我正在编写gerrit插件,希望在插件重新启动/关闭时关闭网络连接。这可以使用LifecycleListener完成 据我所知,gerrit插件有两种关于Guice的操作模式。一种是不要在清单中声明任何内容,而是使用自动注册,使用诸如@Listen和@Export之类的注释。另一个是创建一个Guice模块,并在该模块中手动执行所有布线 我想使用自动注册,但无法使用LifecycleListener。添加@Listen注释无效,侦听器将被忽略 我的代码如下所示(最小化): 我发现Lifecycle

我正在编写gerrit插件,希望在插件重新启动/关闭时关闭网络连接。这可以使用
LifecycleListener
完成

据我所知,gerrit插件有两种关于Guice的操作模式。一种是不要在清单中声明任何内容,而是使用自动注册,使用诸如
@Listen
@Export
之类的注释。另一个是创建一个Guice模块,并在该模块中手动执行所有布线

我想使用自动注册,但无法使用
LifecycleListener
。添加
@Listen
注释无效,侦听器将被忽略

我的代码如下所示(最小化):


我发现
LifecycleListener
s不能与自动注册结合使用


原因如下:为了使
@Listen
注释工作,类实现的
@ExtensionPoint
接口(在本例中为
LifecycleListener
)必须在GUI模块中具有
动态项
动态集
动态映射
定义,对于
LifecycleListener

您是否为
@Listen
注释注册了拦截器?没有,但是
@Listen
注释是由gerrit定义的,用于插件
@ExtensionPoint
的自动注册。您的插件加载成功吗?我尝试在提交消息长度验证插件(核心Gerrit插件)上添加一个
LifecycleListener
,方法与您的示例相同,但它无法加载带有“com.google.gerrit.server.plugins.invalidPlugineException:无法注册com.googlesource.gerrit.plugins.validators.CommitMessageLengthValidation$Lifecycle,服务器不接受com.google.gerrit.extensions.events.LifecycleListener”。你说得对,它不工作。但我认为应该注册。我在gerrit问题跟踪器[1]上提出了这个问题。[1]
@Listen
@Singleton
public class CommitValidationTest implements CommitValidationListener {
        @Listen
        public static class Lifecycle implements LifecycleListener {
                @Override
                public void start() {
                    // write to log
                }

                @Override
                public void stop() {
                    // write to log
                }
        }
}