go - Gazelle 没有创建正确的依赖关系?
问题描述
考虑一个 repo, ,顶部github.com/myacct/sandbox
有一个目录:ji
$ ls -CFR
.:
BUILD.bazel WORKSPACE one/
./one:
oneonone.go
$ cat BUILD.bazel
load("@bazel_gazelle//:def.bzl", "gazelle")
# gazelle:prefix github.com/myacct/sandbox/ji
gazelle(name = "gazelle")
非常标准的东西,直接来自文档。我已经跑了bazel clean --expunge
。现在:
$ bazel run //:gazelle
Starting local Bazel server and connecting to it...
INFO: Analyzed target //:gazelle (66 packages loaded, 7036 targets configured).
INFO: Found 1 target...
Target //:gazelle up-to-date:
bazel-bin/gazelle-runner.bash
bazel-bin/gazelle
INFO: Elapsed time: 23.191s, Critical Path: 5.81s
INFO: 49 processes: 13 internal, 36 linux-sandbox.
INFO: Build completed successfully, 49 total actions
INFO: Build completed successfully, 49 total actions
让我们看看它做了什么:
$ cat one/BUILD.bazel
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
go_library(
name = "one_lib",
srcs = ["one.go"],
importpath = "github.com/symbiont-io/sandbox/ji/one",
visibility = ["//visibility:private"],
deps = [
"@org_golang_google_api//calendar/v3:go_default_library",
"@org_golang_google_api//people/v1:go_default_library",
"@org_golang_x_net//context:go_default_library",
"@org_golang_x_oauth2//:go_default_library",
"@org_golang_x_oauth2//google:go_default_library",
],
)
go_binary(
name = "one",
embed = [":one_lib"],
visibility = ["//visibility:public"],
)
部门看起来不错,这就是我要导入的内容one.go
。
以下是它失败的方式:
$ bazel build //one:one
ERROR: /home/ji/sandbox/ji/one/BUILD.bazel:3:11: no such package '@org_golang_google_api//people/v1': The repository '@org_golang_google_api' could not be resolved and referenced by '//oneonone:oneonone_lib'
ERROR: Analysis of target '//one:one' failed; build aborted: Analysis failed
INFO: Elapsed time: 0.087s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (0 packages loaded, 0 targets configured)
解决方案
我发现文档实际上非常详尽。
无论如何,您需要运行update-repos
. 您可以运行一次性命令来导入您需要的特定存储库:
bazel run //:gazelle -- update-repos google.golang.org/api/people/v1
或者您可以创建一个 Go 模块,然后从以下位置导入依赖项go.mod
:
bazel run //:gazelle -- update-repos -from_file=go.mod
我建议做后者。创建一个模块,go mod init
然后您可以定期运行一个脚本来更新您的依赖项:
# update go.mod
go get -d ./...
# update repos with Gazelle
bazel run //:gazelle -- update-repos -from_file=go.mod
推荐阅读
- python - 返回中的多个打印语句
- python - Python 3:在一行中测试连续数字
- visual-studio-code - How can I get the first line of emmet's "lorem ipsum" generator to be random, not always "Lorem ipsum..."?
- roslyn - Should Roslyn Analyzer determine if using statements should be added and fix it up?
- winapi - How to check the values of the floating-point registers with the windows API?
- javascript - 新手问题:无法从 CSS 和 JS 中显示样式
- firebase - 如何将非功能更改/帮助文件部署到云功能?
- ubuntu - 我无法通过 SSH 登录到托管 Ubuntu 20 LTS 映像的 Compute Engine 实例
- react-hooks - Redux RTK not auto-generating react hooks
- javascript - 如何使用 React 进行下拉菜单