bazel 外部存储库缓存
bazel 简介
安装
centos7:https://docs.bazel.build/versions/4.0.0/install-redhat.html
Step1:
从 Fedora COPR 下载 .repo
文件并复制到 /etc/yum.repos.d/
目录。
Step2:
运行 yum install bazel3
命令安装。
教程
常用命令
命令文档:https://docs.bazel.build/versions/master/command-line-reference.html#fetch-options
查询依赖关系:
bazel query --notool_deps --noimplicit_deps "deps(//:ProjectRunner)" --output graph
可视化网站:
编译命令:
bazel build //:ProjectRunner
清除命令:
bazel clean
bazel clean
在 outputPath
和action_cache
目录上执行rm -rf
。它还会删除工作空间符号链接。 --expunge
选项将清除整个outputBase
。
输出目录
https://docs.bazel.build/versions/master/output_directories.html
- 必须从包含WORKSPACE文件的目录(“工作区目录”)或其子目录中调用Bazel。如果不是,它将报告错误。
outputRoot
目录在Linux上默认为〜/.cache/bazel
,在macOS上默认为/ private/var/tmp
,在Windows上默认为%HOME%
(如果设置),否则默认为%USERPROFILE%
,否则调用SHGetKnownFolderPath()
的结果设置了FOLDERID_Profile
标志。如果设置了环境变量$ TEST_TMPDIR
(如测试bazel本身),则该值将覆盖默认值。- 我们将Bazel用户的构建状态保留在
outputRoot/_bazel_$USER
下。这称为outputUserRoot
目录。 - 在
outputUserRoot
目录下,我们创建一个installBase
目录,其名称为install
加上Bazel安装清单的MD5哈希。 - 在
outputUserRoot
目录下,我们还创建了一个outputBase
目录,该目录的名称是工作区目录的路径名的MD5哈希。因此,例如,如果Bazel在工作空间目录/ home/user/src/my-projec
t中(或在与该目录符号链接的目录中)运行,则我们将创建一个输出基本目录,名为:/home/user/.cache/bazel/ _bazel_user/7ffd56a6e4cb724ea575aba15733d113
。 - 用户可以使用Bazel的
--output_base
启动选项来覆盖默认的输出基本目录。例如,bazel --output_base = /tmp/bazel/output build x/y:z
。 - 用户还可以使用Bazel的
--output_user_root
启动选项来覆盖默认的安装基础目录和输出基础目录。例如:bazel --output_user_root=/tmp/bazel build x/y:z
。
我们在工作区目录中放置了符号链接“bazel-”, “bazel-out”, “bazel-testlogs”, and “bazel-bin” 。这些符号链接指向输出目录内特定于目标的目录内的某些目录。这些符号链接只是为了方便用户,因为Bazel本身并不使用它们。另外,我们仅在工作空间目录可写时才这样做。
#机器上所有Bazel输出的根目录:outputRoot
/home/user/.cache/bazel/
#给定用户的顶级目录取决于用户名:outputUserRoot
_bazel_$USER/
#Bazel安装清单的哈希:installBase
install/
fba9a2c87ee9589d72889caf082f1029/
#包含从的数据部分解压缩的二进制文件和脚本首次运行时的bazel可执行文件(例如帮助程序脚本和主Java文件BazelServer_deploy.jar)
_embedded_binaries/
#客户端工作区目录的哈希(/home/some-user/src/my-project):outputBase
7ffd56a6e4cb724ea575aba15733d113/
缓存
外部依赖缓存
使用 bazel fetch //repo:...
,可以从具有存储库功能的远程源(例如http_archive()或maven_jar())下载外部存储库和工件。有时,网络访问不可用,或者重新下载已下载的存储库是浪费的。
使用中央缓存,Bazel可以在访问网络之前检查它是否包含请求的存储库。允许多个工作空间共享同一存储库高速缓存,并且缓存也是可移植的。
相关联的issue:
Make maven_jar and friends smarter by re-using previously fetched artifacts across different projects#1752
缓存选项
--experimental_repository_cache
--repository_cache
参考文档:
https://bazel.build/designs/2016/09/30/repository-cache.html