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

引入Google API依赖的Proto文件Bazel编译报错求助

Bazel编译含Google API Proto的自定义Proto报错排查

报错信息

23:31:22  (18:01:22) ERROR: /tmp/bazel-build/external/model_monitoring_api/BUILD.bazel:3:14: no such target '@go_googleapis//google/api:resource_proto': target 'resource_proto' not declared in package 'google/api' (did you mean 'resource.proto'?) defined by /tmp/bazel-build/external/go_googleapis/google/api/BUILD.bazel and referenced by '@model_monitoring_api//:monitoring_api_proto'
23:31:22  (18:01:22) ERROR: /tmp/bazel-build/external/model_monitoring_api/BUILD.bazel:3:14: no such target '@go_googleapis//google/api:field_behavior_proto': target 'field_behavior_proto' not declared in package 'google/api' (did you mean 'field_behavior.proto'?) defined by /tmp/bazel-build/external/go_googleapis/google/api/BUILD.bazel and referenced by '@model_monitoring_api//:monitoring_api_proto'
23:31:22  (18:01:22) ERROR: /tmp/bazel-build/external/model_monitoring_api/BUILD.bazel:3:14: no such target '@go_googleapis//google/api:client_proto': target 'client_proto' not declared in package 'google/api' (did you mean 'client.proto'?) defined by /tmp/bazel-build/external/go_googleapis/google/api/BUILD.bazel and referenced by '@model_monitoring_api//:monitoring_api_proto'

自定义Proto中的导入语句

import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/field_mask.proto";

当前Bazel构建文件内容

load("@rules_proto//proto:defs.bzl", "proto_library")

proto_library(
    name = "monitoring_api_proto",
    srcs = glob(["v1/*.proto"]),
    visibility = ["//visibility:public"],
    deps = [
        "@com_google_protobuf//:any_proto",
        "@com_google_protobuf//:duration_proto",
        "@com_google_protobuf//:empty_proto",
        "@com_google_protobuf//:field_mask_proto",
        "@com_google_protobuf//:timestamp_proto",
        "@go_googleapis//google/api:annotations_proto",
        "@go_googleapis//google/api:client_proto",
        "@go_googleapis//google/api:field_behavior_proto",
        "@go_googleapis//google/api:resource_proto",
    ],
)

已尝试的操作

  • 直接导入.proto文件,出现Google API相关proto对Bazel目标不可见的报错
  • 仅添加@go_googleapis//google/api:annotations_proto到依赖中时无导入错误,但因缺少其他依赖导致编译失败

问题原因与解决方案

问题原因

报错提示的目标不存在,是因为@go_googleapis//google/api包内的client.proto、field_behavior.proto、resource.proto对应的proto_library目标名称不带_proto后缀,只有annotations.proto对应的目标是annotations_proto。

修改后的Bazel构建文件

将依赖中的错误目标名修正:

load("@rules_proto//proto:defs.bzl", "proto_library")

proto_library(
    name = "monitoring_api_proto",
    srcs = glob(["v1/*.proto"]),
    visibility = ["//visibility:public"],
    deps = [
        "@com_google_protobuf//:any_proto",
        "@com_google_protobuf//:duration_proto",
        "@com_google_protobuf//:empty_proto",
        "@com_google_protobuf//:field_mask_proto",
        "@com_google_protobuf//:timestamp_proto",
        "@go_googleapis//google/api:annotations_proto",
        "@go_googleapis//google/api:client",
        "@go_googleapis//google/api:field_behavior",
        "@go_googleapis//google/api:resource",
    ],
)

验证逻辑

可以查看@go_googleapis//google/api/BUILD.bazel文件确认目标名称,例如:

  • client.proto对应的proto_library名称为client
  • field_behavior.proto对应的proto_library名称为field_behavior
  • resource.proto对应的proto_library名称为resource

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:20:32