使用Bzlmod编译Proto时遇//external:protocol_compiler未找到错误求助
解决Bzlmod编译Proto时找不到//external:protocol_compiler的问题
问题原因:
grpc_proto_library设置use_external=True时,会依赖外部的Protocol Buffers编译器(protoc),但在Bzlmod环境下,你没有显式引入protobuf依赖,且旧版本grpc的Bzlmod支持未自动处理protoc的依赖关系。解决方案1:添加protobuf依赖并调整use_external参数
- 修改
MODULE.bazel,添加与grpc 1.41.0兼容的protobuf依赖:module( name = "proto_test" ) bazel_dep(name = "grpc", version = "1.41.0", repo_name = "com_github_grpc_grpc") bazel_dep(name = "protobuf", version = "3.19.4") - 修改
BUILD文件,将use_external改为False,使用Bazel管理的protoc:load("@com_github_grpc_grpc//bazel:grpc_build_system.bzl", "grpc_proto_library") grpc_proto_library( name = "rpc_proto", srcs = [ "rpc.proto" ], use_external = False, ) - 执行
bazel sync更新依赖,再重新编译:bazel build :rpc_proto
- 修改
解决方案2:配置protobuf工具链(可选)
如果仍有问题,可在MODULE.bazel中添加protobuf工具链配置:module( name = "proto_test" ) bazel_dep(name = "grpc", version = "1.41.0", repo_name = "com_github_grpc_grpc") bazel_dep(name = "protobuf", version = "3.19.4") protobuf = use_extension("@protobuf//:extensions.bzl", "protobuf") protobuf.toolchain()执行
bazel sync后重新编译即可。
内容的提问来源于stack exchange,提问作者hole
相关产品推荐
相关产品推荐

