go - Bazel 在处理 protobuf 文件时有一个错误。我怎样才能暂时解决这个问题?

标签 go protocol-buffers bazel

我在使用 Bazel、Go 和 Protobuf 构建代码库时遇到问题。 Protobuf 文件在生成时未由 Bazel Gezelle 正确映射。我认为这是一个 known bug .我打开了我的 own ticket .如果这是问题所在,我不认为它会很快得到解决。它被标记为 P2,自 10 月以来一直开放。与此同时,我正在寻找问题的解决方案。

我们使用自定义 Protobuf plugin在构建我们的 protobuf 文件时。我的想法是手动生成 protobuf 文件,让 Bazel 忽略 protobuf 文件,只使用已经生成的代码。

这听起来行得通吗?我该怎么做?我可以让 Gezelle 为我忽略 Protobuf 文件吗?

谢谢你的时间

最佳答案

复制我在 bazelbuild/bazel-gazelle#209 上的回复对于遇到相同问题的任何人。


是的,bazelbuild/bazel#3867是问题。

每当您使用 Bazel 构建一个 proto_library(对于任何语言,而不仅仅是 Go),Bazel 认为导入是相对于存储库根目录(在您的本地存储库中或在您的任何外部存储库中)存储库)。我猜 brand.proto 正在导入 github.com/xxx/jscode/jsge/pkg/paging/proto/page.proto。由于您要导入的文件实际上是 jsge/pkg/paging/proto/page.proto,因此 Bazel 调用时 protoc 将找不到它。

由于这是 proto_library 的问题,因此 Gazelle 或 rules_go 对此无能为力。如果bazelbuild/bazel#3867实现后,您将能够调整 proto_library 导入路径。到那时,您将无法在不修改规则的情况下构建 proto_library 规则。

不幸的是,目前我能提供的最佳建议是检查预先生成的 .pb.go 文件并将它们包含在您的 go_library 规则中。如果您在根构建文件中添加注释 # gazelle:proto disable,它将忽略 .proto 文件并包含 .pb.go 文件。

关于go - Bazel 在处理 protobuf 文件时有一个错误。我怎样才能暂时解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50519647/

相关文章:

go - 是否有更简洁的方法来创建在 channel 上接收后取消的上下文?

redis - 如何在redis缓存中存储protobuffer对象?

android - 使用 C++ 和 Android NDK 解析包含字符串的 protobuf 消息时崩溃

tensorflow - 巴泽尔+QtCreator

Google 云端硬盘 API 错误 - "message": "Shared drive not found: xyz"

docker - Hyperledger 结构构建错误

go - 如何从多个表中删除记录

c# - protobuf.net De-Serializer 无限期等待

TensorFlow Bazel 构建失败

bazel - 强制 Bazel 仅使用本地 java