当项目具有内部依赖性时,bazel golang 构建失败
bazel golang build fails when project has internal dependency
我使用的是 MacOS 10.13.2。
去 1.10。
巴泽尔 0.11.1
我需要编译一个包含 2 个项目(project1 和 project2)的 repo。
project1 有 2 个子包。 p1lib 和 dep1
p1lib 使用 dep1.
我用 gazelle 生成 BUILD 文件,文件看起来没问题。
gazelle -go_prefix=github.com/BazelBuildForGo
但是当我 运行 构建时,我收到一条错误消息,指出我缺少直接依赖项。
bazel build //project1
INFO: Analysed target //project1:project1 (3 packages loaded).
INFO: Found 1 target...
ERROR: /private/var/tmp/_bazel_user1/df78026a5ee0c7ed3d23dd05c3a3b1f7/external/com_github_wix_private_bazelbuildforgo/project1/p1lib/BUILD.bazel:3:1: GoCompile external/com_github_wix_private_bazelbuildforgo/project1/p1lib/darwin_amd64_stripped/go_default_library~/github.com/BazelBuildForGo/project1/p1lib.a failed (Exit 1)
2018/03/25 18:02:55 missing strict dependencies:
external/com_github_wix_private_bazelbuildforgo/project1/p1lib/p1lib.go: import of github.com/wix-private/BazelBuildForGo/project1/dep1, which is not a direct dependency
Target //project1:project1 failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 0.358s, Critical Path: 0.12s
FAILED: Build did NOT complete successfully
我的项目可以在这里找到
https://github.com/wix-playground/BazelBuildForGo
我认为问题在于您在命令行中传递给 Gazelle 的导入前缀 (github.com/BazelBuildForGo
) 与 .go 文件中的导入前缀 (github.com/wix-private/BazelBuildForGo
) 不同。当 Gazelle 看到当前前缀之外的导入时,它会为这些导入生成外部依赖,而那些依赖将丢失:
go_library(
name = "go_default_library",
srcs = ["p1lib.go"],
importpath = "github.com/BazelBuildForGo/project1/p1lib",
visibility = ["//visibility:public"],
deps = ["@com_github_wix_private_bazelbuildforgo//project1/dep1:go_default_library"],
)
这个问题的修复非常简单。只是 运行 个前缀为 github.com/wix-private/BazelBuildForGo
的瞪羚。你实际上已经在 //:gazelle
中有了这个,所以只需 运行 那个,然后重建。
$ bazel run //:gazelle
$ bazel build //...
这会将上面的 go_library
规则更改为:
go_library(
name = "go_default_library",
srcs = ["p1lib.go"],
importpath = "github.com/wix-private/BazelBuildForGo/project1/p1lib",
visibility = ["//visibility:public"],
deps = ["//project1/dep1:go_default_library"],
)
我使用的是 MacOS 10.13.2。 去 1.10。 巴泽尔 0.11.1
我需要编译一个包含 2 个项目(project1 和 project2)的 repo。 project1 有 2 个子包。 p1lib 和 dep1 p1lib 使用 dep1.
我用 gazelle 生成 BUILD 文件,文件看起来没问题。
gazelle -go_prefix=github.com/BazelBuildForGo
但是当我 运行 构建时,我收到一条错误消息,指出我缺少直接依赖项。
bazel build //project1
INFO: Analysed target //project1:project1 (3 packages loaded).
INFO: Found 1 target...
ERROR: /private/var/tmp/_bazel_user1/df78026a5ee0c7ed3d23dd05c3a3b1f7/external/com_github_wix_private_bazelbuildforgo/project1/p1lib/BUILD.bazel:3:1: GoCompile external/com_github_wix_private_bazelbuildforgo/project1/p1lib/darwin_amd64_stripped/go_default_library~/github.com/BazelBuildForGo/project1/p1lib.a failed (Exit 1)
2018/03/25 18:02:55 missing strict dependencies:
external/com_github_wix_private_bazelbuildforgo/project1/p1lib/p1lib.go: import of github.com/wix-private/BazelBuildForGo/project1/dep1, which is not a direct dependency
Target //project1:project1 failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 0.358s, Critical Path: 0.12s
FAILED: Build did NOT complete successfully
我的项目可以在这里找到 https://github.com/wix-playground/BazelBuildForGo
我认为问题在于您在命令行中传递给 Gazelle 的导入前缀 (github.com/BazelBuildForGo
) 与 .go 文件中的导入前缀 (github.com/wix-private/BazelBuildForGo
) 不同。当 Gazelle 看到当前前缀之外的导入时,它会为这些导入生成外部依赖,而那些依赖将丢失:
go_library(
name = "go_default_library",
srcs = ["p1lib.go"],
importpath = "github.com/BazelBuildForGo/project1/p1lib",
visibility = ["//visibility:public"],
deps = ["@com_github_wix_private_bazelbuildforgo//project1/dep1:go_default_library"],
)
这个问题的修复非常简单。只是 运行 个前缀为 github.com/wix-private/BazelBuildForGo
的瞪羚。你实际上已经在 //:gazelle
中有了这个,所以只需 运行 那个,然后重建。
$ bazel run //:gazelle
$ bazel build //...
这会将上面的 go_library
规则更改为:
go_library(
name = "go_default_library",
srcs = ["p1lib.go"],
importpath = "github.com/wix-private/BazelBuildForGo/project1/p1lib",
visibility = ["//visibility:public"],
deps = ["//project1/dep1:go_default_library"],
)