我正在尝试使用bazel和gazelle工具来构建一个大型Golang存储库,其中包含预先生成的proto文件。在proto定义中使用来自definitions定义的验证规则存在问题,bazel工具无法使用此依赖构建存储库。为了重现这个问题,我创建了一个带有示例github储存库服务的gRPC。如果没有envoyproxy依赖关系的验证,bazel工具就成功地构建了go包。但是引入这种依赖会引发错误。
用于构建存储库的命令:
生成存储库之前生成proto文件。
protoc -I=. -I ~/go/pkg/mod/github.com/envoyproxy/protoc-gen-validate@v0.6.1 --go_out=./../../../ --validate_out="lang=go:./../../../" --go-grpc_out=./../../../ ./protos/pinger/service.proto使用瞪羚生成依赖关系
bazel run //:gazelle -- update-repos -from_file=go.mod -to_macro=deps.bzl%go_dependencies -build_file_proto_mode=disable_global -prune使用瞪羚生成BUILD.bazel文件
bazel run //:gazelle构建pinger go二进制文件
bazel build //cmd/pinger最后一个build命令引发一个错误。
go/src/github.com/ihtkas/bazel-gazelle-ex/api/pinger/BUILD.bazel:3:11:错误加载包'@com_github_envoyproxy_protoc_gen_validate//validate':无法找到@com_google_‘@com_github_envoyproxy_protoc_gen_validate//validate’://:Probuf.bzl的包:存储库'@com_google_protobuf‘无法解析。并由'//api/pinger:pinger‘错误引用:分析目标’/cmd/pinger:pinger‘失败;构建中止:分析失败
有一个相同的github问题。有多种建议,但似乎都不适合我。解释所有的尝试都会使这个问题变得无用。我需要帮助找到一个解决问题的解决方案,并使用bazel工具和预生成的proto文件成功地构建存储库。根据建议,我将在这里或在同一个存储库中实验和分享结果。
发布于 2021-10-03 09:36:25
这个问题可以通过以下三个步骤来解决。
->通过bazel 命名约定修正使用来自envoyproxy代理/ from gen验证的特定提交。
go get github.com/envoyproxy/protoc-gen-validate@4f41f10dde19ec4dd9dd8cf6f7537139f52fb58b->包括bazel工作区中"com_google_protobuf“的依赖项
http_archive(
name = "com_google_protobuf",
sha256 = "d0f5f605d0d656007ce6c8b5a82df3037e1d8fe8b121ed42e536f569dec16113",
strip_prefix = "protobuf-3.14.0",
urls = [
"https://mirror.bazel.build/github.com/protocolbuffers/protobuf/archive/v3.14.0.tar.gz",
"https://github.com/protocolbuffers/protobuf/archive/v3.14.0.tar.gz",
],
)
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
protobuf_deps()->将io_bazel_rules_go更新为v0.28.0
所有的修复都包含在存储库中的公共关系和合并为“工作”分公司中以供参考。
https://stackoverflow.com/questions/69416813
复制相似问题