到目前为止,我一直在使用go
工具来获取依赖项。我已经设置$GOPATH
为~/projects/holygrail
,并且我已经将我的代码签入到src/mycodehosting.foo/myuser/holygrail
.
鉴于我实际上依赖于诸如 gRPC 之类的东西,这意味着我需要protoc
从 protobuf v3 的源代码构建,所以我编写了一个小脚本来帮助我做到这一点。当我检查我的源代码时,我强烈希望不必预先准备布局,并且我强烈不希望使用 bash 脚本来获取我的依赖项,然后构建它们。
目前的暂定解决方案:
- 使用 Git 子模块来获取外部依赖项(遗憾的是,这意味着没有
go get
知道如何做的智能重定向) GO15VENDOREXPERIMENT
通过将变量翻转为 1 来使用 Go 1.5 的 vendoring- 切换到 Bazel 以拥有一个健全的构建系统,该系统将知道如何仅根据需要构建各种依赖项
不幸的是,我有点卡住了。
- 我正在使用 Bazel 0.1.1 和 Skylark 规则从 git repo 复制到
~/.bazel/base_workspace
- 我最初尝试在 Bazel's中使用
new_local_repository
(后来被切换到使用),为其中一个依赖项指定自定义文件new_git_repository
WORKSPACE
BUILD
- 这失败了,因为 Bazel 无法找到 Go Skylark 规则
- 我不确定如何为文件夹中的下载存储库编写自定义
BUILD
文件git-submodule
,vendor/
并将它们公开给 Bazel。
我在正确的轨道上吗?我使用子模块是否正确?我是否正确使用vendor/
子文件夹来存储 Go 库?
- 使用 Bazel 构建外部依赖项的推荐方法是什么,其中代码和依赖项都是用 Go 编写的?
- 您能否提供一个存储库示例:
- 正确地依赖于外部
BUILD
无文件 Go 存储库(没有实际导入上游代码)? - 在外部存储库中正确构建 Go 代码?
- 将外部存储库中的 Go 代码正确集成到 Go 主项目中?
- 正确地依赖于外部
对此进行更多研究: