到目前为止,我一直在使用go
工具来获取依赖项。我已将$GOPATH
设置为~/projects/holygrail
,我已将代码检出src/mycodehosting.foo/myuser/holygrail
。
鉴于我实际上依赖于诸如gRPC之类的东西,这意味着我需要从protobuf v3的源代码构建protoc
,我写了一个小脚本来帮助我做到这一点。当我查看我的源代码时,我非常希望不必须预先准备布局,我非常希望不使用bash脚本来获取我的依赖项,然后构建它们。
目前的暂定解决方案:
go get
知道如何做的智能重定向)GO15VENDOREXPERIMENT
变量翻转为1 不幸的是,我稍微卡住了。
~/.bazel/base_workspace
new_local_repository
中使用new_git_repository
(稍后将切换为使用WORKSPACE
),为其中一个依赖项指定自定义BUILD
文件
BUILD
- git-submodule
的文件 - 在vendor/
文件夹中下载的存储库,并将它们公开给Bazel。我是否在正确的轨道上?我是否正确使用子模块?我是否正确使用vendor/
子文件夹来存储Go库?
BUILD
- 无文件的Go存储库(没有实际导入上游代码)?对此进行了更多研究:
BUILD
文件用于许多依赖项(即使它们不是子模块,这没有什么区别)。
go_package()
规则。但这似乎来了from Kythe itself。
答案 0 :(得分:0)
截至几个版本之前,Bazel支持规则名称中的斜杠。除了对自定义程序包名称(https://github.com/bazelbuild/rules_go/issues/16)的黑客入侵支持外,这似乎也涵盖了我的用例。
tl; dr我有//vendor:BUILD
个文件,其中包含go_library(name='github.com/blah/blah', ...)
等规则。目录命名为,例如//vendor/github.com/blah/blah
。每个子包都有一个单独的规则。我手动指定了依赖项。