You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行bazel build :protoc :protobuf构建失败,请求排查解决

问题

执行bazel build :protoc :protobuf构建protobuf 21.5版本时失败,报错信息如下:

Starting local Bazel server and connecting to it...
DEBUG: /root/.cache/bazel/_bazel_wang/181be6b67ee4902db879f2b646f0f657/external/rules_jvm_external/coursier.bzl:445:22: maven_install.json的输入已更改,但未重新生成锁定文件。建议运行'bazel run @unpinned_maven//:pin'
ERROR: /root/.cache/bazel/_bazel_wang/181be6b67ee4902db879f2b646f0f657/external/rules_pkg/pkg/mappings.bzl:108:12: 名称'json'未定义
ERROR: /root/.cache/bazel/_bazel_wang/181be6b67ee4902db879f2b646f0f657/external/rules_pkg/pkg/mappings.bzl:224:22: 名称'json'未定义
ERROR: /root/.cache/bazel/_bazel_wang/181be6b67ee4902db879f2b646f0f657/external/rules_pkg/pkg/mappings.bzl:413:22: 名称'json'未定义
ERROR: /root/.cache/bazel/_bazel_wang/181be6b67ee4902db879f2b646f0f657/external/rules_pkg/pkg/mappings.bzl:473:22: 名称'json'未定义
INFO: Repository rules_proto实例化于:
  /home/wang/test_csh/protobuf-21.5/WORKSPACE:31:14: 在<toplevel>中
  /home/wang/test_csh/protobuf-21.5/protobuf_deps.bzl:73:24: 在protobuf_deps中
  /home/wang/test_csh/protobuf-21.5/protobuf_deps.bzl:19:17: 在_github_archive中
Repository rule http_archive定义于:
  /root/.cache/bazel/_bazel_wang/181be6b67ee4902db879f2b646f0f657/external/bazel_tools/tools/build_defs/repo/http.bzl:336:31: 在<toplevel>中
INFO: Repository rules_cc实例化于:
  /home/wang/test_csh/protobuf-21.5/WORKSPACE:31:14: 在<toplevel>中
  /home/wang/test_csh/protobuf-21.5/protobuf_deps.bzl:57:24: 在protobuf_deps中
  /home/wang/test_csh/protobuf-21.5/protobuf_deps.bzl:19:17: 在_github_archive中
Repository rule http_archive定义于:
  /root/.cache/bazel/_bazel_wang/181be6b67ee4902db879f2b646f0f657/external/bazel_tools/tools/build_defs/repo/http.bzl:336:31: 在<toplevel>中
INFO: Repository rules_java实例化于:
  /home/wang/test_csh/protobuf-21.5/WORKSPACE:31:14: 在<toplevel>中
  /home/wang/test_csh/protobuf-21.5/protobuf_deps.bzl:65:24: 在protobuf_deps中
  /home/wang/test_csh/protobuf-21.5/protobuf_deps.bzl:19:17: 在_github_archive中
Repository rule http_archive定义于:
  /root/.cache/bazel/_bazel_wang/181be6b67ee4902db879f2b646f0f657/external/bazel_tools/tools/build_defs/repo/http.bzl:336:31: 在<toplevel>中
INFO: Repository rules_python实例化于:
  /home/wang/test_csh/protobuf-21.5/WORKSPACE:31:14: 在<toplevel>中
  /home/wang/test_csh/protobuf-21.5/protobuf_deps.bzl:81:21: 在protobuf_deps中
Repository rule http_archive定义于:
  /root/.cache/bazel/_bazel_wang/181be6b67ee4902db879f2b646f0f657/external/bazel_tools/tools/build_defs/repo/http.bzl:336:31: 在<toplevel>中
ERROR: 跳过':protoc': 加载包''失败: 在/root/.cache/bazel/_bazel_wang/181be6b67ee4902db879f2b646f0f657/external/rules_pkg/mappings.bzl中: 扩展'pkg/mappings.bzl'存在错误
ERROR: 加载包''失败: 在/root/.cache/bazel/_bazel_wang/181be6b67ee4902db879f2b646f0f657/external/rules_pkg/mappings.bzl中: 扩展'pkg/mappings.bzl'存在错误
INFO: 耗时: 11.787s
INFO: 0个进程。
FAILED: 构建未成功完成(已加载1个包)

解决方案

1. 修复rules_pkg依赖版本

核心错误是rules_pkg的mappings.bzl文件缺失json模块导入,本质是依赖的rules_pkg版本与当前环境不兼容。直接指定兼容的rules_pkg版本:

  • 打开protobuf-21.5/protobuf_deps.bzl文件,找到rules_pkg的http_archive定义段
  • 替换为兼容的固定版本:
    http_archive(
        name = "rules_pkg",
        urls = ["https://github.com/bazelbuild/rules_pkg/releases/download/0.7.0/rules_pkg-0.7.0.tar.gz"],
        sha256 = "ccc4e56fec04f30e4a252937a378b452b8f652572e4c85a5620e4f8004f0f8e",
    )
    
  • 清理Bazel缓存:bazel clean --expunge

2. 临时补全json模块导入

若不想修改依赖版本,可手动补全缺失的导入:

  • 打开报错文件/root/.cache/bazel/_bazel_wang/181be6b67ee4902db879f2b646f0f657/external/rules_pkg/pkg/mappings.bzl
  • 在文件顶部添加:load("@bazel_skylib//lib:json.bzl", "json")
  • 重新执行构建命令

3. 更新maven锁定文件

完成上述修复后,处理DEBUG提示的锁定文件问题:

bazel run @unpinned_maven//:pin

4. 验证Bazel版本兼容性

确保使用的Bazel版本与protobuf 21.5兼容,建议使用Bazel 5.x版本(protobuf 21.x官方推荐Bazel 5.0.0及以上)。


内容的提问来源于stack exchange,提问作者xiaoming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:15:34