Gerrit使用Bazel构建时Maven2 Jar包SHA1不匹配如何解决
Bazel构建Gerrit 3.2.14时bcprov依赖SHA1校验失败修复方案
问题核心
构建//lib/bouncycastle:bcprov目标时拉取bcprov-jdk15on-1.61.jar依赖失败,硬编码预期SHA1值为00df4b474e71be02c1349c3292d98886f888d1f7,实际下载得到的文件SHA1值为8f13ba4527c222db2995b9cf052d88a4540890f9,哈希校验不通过阻断构建流程。
排查方向
- 本地Bazel缓存损坏:之前中断构建、异常断电等情况会导致缓存目录下的jar包写入不完整,哈希异常
- 网络链路篡改:内网代理、网关、公共网络劫持可能修改下载的二进制文件,返回错误内容
- 镜像源异常:自定义配置的Maven镜像如果同步不完整、缓存错误,会返回损坏的包文件
- 依赖硬编码哈希过期:上游仓库偶发出现同版本包重新发布的情况,导致源码中预置的校验值和实际文件不匹配
修复步骤(按优先级操作)
- 清理损坏缓存重试
直接删除出错的依赖缓存目录,执行命令:
清理完成后重新执行构建命令,多数临时缓存异常问题可直接解决。rm -rf /home/builder/.cache/bazel/_bazel_builder/9afd9023b67c60c8c3f995a3b1c75370/external/bcprov/ - 排查网络与镜像源问题
- 如果配置了自定义Maven镜像,临时切回默认源测试,或更换其他可信镜像源
- 内网环境下临时切换到无代理的直连网络测试,排除代理篡改文件的可能
- 手动从可信渠道获取对应版本的
bcprov-jdk15on-1.61.jar包,本地执行sha1sum bcprov-jdk15on-1.61.jar计算哈希值,确认官方发布包的真实哈希
- 修正依赖校验值(仅确认官方包哈希与硬编码值不一致时使用)
如果手动获取的官方包哈希和报错中的实际值一致,说明源码中预置的校验值过期,找到Gerrit源码中bouncycastle的依赖声明文件(通常为lib/bouncycastle/BUILD或WORKSPACE中对应的外部依赖配置段),将bcprov-jdk15on-1.61.jar对应的SHA1值修改为实际计算得到的正确值,保存后重新构建即可。 - 本地预置依赖跳过下载
手动准备好哈希匹配的bcprov-jdk15on-1.61.jar文件,直接放到Bazel预期的缓存路径:
放置完成后重新执行构建即可跳过下载步骤。/home/builder/.cache/bazel/_bazel_builder/9afd9023b67c60c8c3f995a3b1c75370/external/bcprov/jar/
内容的提问来源于stack exchange,提问作者mitchychien
相关产品推荐
相关产品推荐

