我想对用于镜像的 Bitbucket 服务器存储库挂钩 (https://github.com/ef-labs/stash-hook-mirror) 进行更改,然后删除原始版本并安装更新版本。
但是,在进行此类更改后,Bitbucket 开始给出 java.lang.ClassCastException
错误,堆栈跟踪如下所示:
java.lang.ClassCastException: com.englishtown.bitbucket.hook.MirrorRequest cannot be cast to com.englishtown.bitbucket.hook.MirrorRequest
at com.atlassian.stash.internal.concurrent.HazelcastBucketedExecutor.schedule(HazelcastBucketedExecutor.java:63)
at com.atlassian.stash.internal.concurrent.DelegatingInternalBucketedExecutor.schedule(DelegatingInternalBucketedExecutor.java:24)
at com.englishtown.bitbucket.hook.MirrorRepositoryHook.lambda$schedulePushes$0(MirrorRepositoryHook.java:177)
at java.util.ArrayList.forEach(ArrayList.java:1259)
at com.englishtown.bitbucket.hook.MirrorRepositoryHook.schedulePushes(MirrorRepositoryHook.java:177)
at com.englishtown.bitbucket.hook.MirrorRepositoryHook.validate(MirrorRepositoryHook.java:138)
at com.atlassian.stash.internal.hook.repository.DefaultRepositoryHookService.validateSettings(DefaultRepositoryHookService.java:896)
at com.atlassian.stash.internal.hook.repository.DefaultRepositoryHookService.lambda$enable$0(DefaultRepositoryHookService.java:203)
at java.util.Optional.ifPresent(Optional.java:159)
似乎 BitBucket 会缓存插件中的数据,并且在删除插件后不会清除它。这是它的一个常见问题 - 请参阅这些票证:https://github.com/ef-labs/stash-hook-mirror/issues/84 或 https://github.com/ef-labs/stash-hook-mirror/issues/83
建议的解决方法是重新启动 BitBucket 实例,它可以工作。
另一种似乎有效的解决方法是重命名类和文件以包含一个版本作为后缀:比如 MirrorRepositoryHook.java
到 MirrorRepositoryHookV331.java
。
有更优雅的解决方案吗?