Contents

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 命令安装。

教程

java / c++

常用命令

命令文档:https://docs.bazel.build/versions/master/command-line-reference.html#fetch-options

查询依赖关系:

bazel query  --notool_deps --noimplicit_deps "deps(//:ProjectRunner)" --output graph

可视化网站:

http://www.webgraphviz.com/

编译命令:

bazel build //:ProjectRunner

清除命令:

bazel clean

bazel cleanoutputPathaction_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-project中(或在与该目录符号链接的目录中)运行,则我们将创建一个输出基本目录,名为:/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

https://github.com/bazelbuild/bazel/issues/1752