【问题标题】:Buf: Import protocol buffers from another projectBuf:从另一个项目导入协议缓冲区
【发布时间】:2023-02-23 01:06:16
【问题描述】:

我正在使用 buf CLI 通过命令 buf generate 为 Go 生成原型。

如果在同一目录中定义了任何导入,我就能够成功生成原型。

但是,我无法从另一个存储库或同一存储库但不同的文件夹导入原型。

以下是我尝试将 error.proto 从同一个存储库导入到 service.proto 的方法。 它也可能是一个不同的存储库。

syntax = "proto3";

option go_package = "github.com/organization/repository/service/proto/gen/service/v1;servicev1";

package service.v1;

import "github.com/organization/repository/common/proto/def/error/v1/error.proto";

该文件依赖于内部目录:

service/proto/def/service/v1/service.proto

我的buf.gen.yaml看起来像

version: v1
plugins:
  - name: go
    out: ../../
    opt: module=github.com/organization/repository/service
  - name: go-grpc
    out: ../../
    opt: require_unimplemented_servers=false,module=github.com/organization/repository/service

我在目录中调用buf generate

cd service/proto/def
buf generate

错误信息是:

common/proto/def/error/v1/error.proto: does not exist

是否可以导入那个 error.proto?如果是这样,我该怎么做?

【问题讨论】:

    标签: protocol-buffers protoc buf


    【解决方案1】:

    使用 protobuf import 语句,期望它与某些实际文件系统路径相关。无论是相对于包含带有 import 语句的文件的目录,还是相对于通过 -I / --proto_path 指定的某些路径.

    所以进口

    import "github.com/organization/repository/common/proto/def/error/v1/error.proto";
    

    ..会暗示那条路存在于某处,但显然不存在。在单个存储库中,一个简单的选择是将 buf.work.yamlbuf.gen.yaml 放在根目录中,并使用相对于存储库根目录的导入。对于与其他存储库相关的导入,您可能会发现 Buf Schema Registry (BSR) 在这里很有帮助。

    另见Import protobuf file from GitHub repository

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 2011-09-18
      • 2021-12-19
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多