使用入门

本页介绍如何开始向 Bazel 贡献代码。其中介绍了如何设置编码环境,介绍了如何创建 IntelliJ 项目,并指导您编译和调试项目。

设置环境后,您可以快速了解 Bazel 代码库的结构、如何搜索和浏览代码,以及如何使用 Bazel 的持续集成系统监控构建。

如何为 Bazel 源代码做贡献?

Bazel 是一个大型项目,更改 Bazel 源代码可能很困难。

在更改之前,请创建 GitHub 问题或发送电子邮件至 Bazel-dev@

最有用的贡献可以修复错误或添加功能(而不是样式、重构或“清理”更改)。您的更改应包括测试和文档,并牢记向后兼容性、可移植性和对内存使用情况和性能的影响。

如需了解如何提交更改,请参阅补丁程序接受流程

安装 Bazel

开始开发之前,您需要执行以下操作:

  1. 在系统上安装最新版本的 Bazel。如需了解相关说明,请参阅从源代码编译 Bazel

  2. 从 GitHub 克隆 Bazel 的 Git 代码库:

    git clone https://github.com/bazelbuild/bazel.git
    
  3. 安装所有遗漏的前提条件

  4. 尝试构建 Bazel

    • 在 Linux/macOS 中的 Bash/Terminal 中:

      cd bazel
      bazel build //src:bazel
      
    • 在 Windows 上,请在命令提示符窗口中执行以下操作:

      cd bazel
      bazel --output_user_root=c:\tmp build //src:bazel.exe
      

      为缩短迭代时间(但较大的二进制文件),请改用 //src:bazel-dev.exe

这将在 bazel-bin/src/bazel(在 Windows 上,则为 bazel-bin/src/bazel.exe)中生成一个有效的 Bazel 二进制文件。

创建 IntelliJ 项目

Bazel 支持的 IDE 是 IntelliJ。

如需使用 IntelliJ,请执行以下操作:

  1. 安装 Bazel 的 IntelliJ 插件
  2. 在插件偏好设置 (Preferences > Other Settings > Bazel Settings) 中设置 Bazel 二进制文件的路径。
  3. 使用以下设置将 Bazel 工作区导入为 Bazel 项目 (File > Import Bazel Project...):
    • 使用现有的 Bazel 工作区:选择克隆的 Git 代码库。
    • 选择 Import from workspace,然后选择 scripts/ij.bazelproject 文件作为 Project view
  4. 下载 Google 的 IntelliJ 版 Java 代码样式方案文件,然后导入(转到 Preferences > Editor > Code Style > Java,然后点击 Manage,然后按 Import),并在处理 Bazel 代码时使用。

编译 Bazel

您需要编译 Bazel 以对其进行测试。如需编译 Bazel 的开发版本,您需要最新版本的 Bazel,该版本可以从源代码编译

您可以使用 bazel build //src:bazel(借助 PATH 中的 bazel)构建 Bazel 二进制文件。生成的二进制文件位于 bazel-bin/src/bazel。在 Bazel 引导完成后,我们建议您重新构建 Bazel。

除了 Bazel 二进制文件之外,您可能还需要构建 Bazel 使用的各种工具。它们位于 //src/java_tools/...//src/objc_tools/...//src/tools/... 中,它们的目录包含描述其各自的实用程序的 README 文件。

修改 Bazel 时:

  1. 使用 bazel build //:bazel-distfile 构建分发归档。
  2. 将归档文件解压缩到新的空目录中。
  3. 在此处运行 bash compile.sh all

此命令会使用 ./compile.sh 重新构建 Bazel,使用 compile.sh 重新构建 Bazel,并使用 Bazel 构建的二进制文件重新构建 Bazel。它会比较构造的 Bazel 构建是否相同,然后使用 bazel test //src/... //third_party/ijar/... 运行所有 Bazel 测试。此操作也在内部使用,以确保在推送新提交时不会破坏 Bazel。

调试 Bazel

如需在 .bazelrc 中为 C++ 和 Java 创建调试配置,请使用:

build:debug -c dbg
build:debug --javacopt="-g"
build:debug --copt="-g"
build:debug --strip="never"

使用 bazel build --config debug //src:bazel 重新构建 Bazel,并使用您喜爱的调试程序开始调试。

如需调试 C++ 客户端,请照常从 gdblldb 运行该客户端。但是,如需调试 Java 代码,请使用以下命令连接到服务器:

  • 在命令前面使用调试选项 --host_jvm_debug 运行 Bazel(例如 bazel --host_jvm_debug build //src:bazel)。
  • 将调试程序连接到端口 5005。例如,使用 jdb 运行 jdb -attach localhost:5005

我们的 IntelliJ 插件具有内置调试支持

使用 Bazel 持续集成

如需开始使用 Bazel CI 系统,请参阅 Bazel 持续集成 如需监控 Bazel 贡献内容的测试和构建,请使用 Bazel CI 信息中心

Bazel 的代码说明

Bazel 拥有一个大型代码库,该代码库在多个位置具有代码。

Bazel 的组织方式如下:

  • 客户端代码位于 src/main/cpp,并提供命令行界面。
  • 协议缓冲区位于 src/main/protobuf 下。
  • 服务器代码位于 src/main/javasrc/test/java 中。
    • 核心代码主要由 SkyFrame 和一些实用程序组成。
    • 内置规则位于 com.google.devtools.build.lib.rulescom.google.devtools.build.lib.bazel.rules 中。您可能需要先阅读编写规则的挑战
  • Java 原生接口位于 src/main/native 中。
  • 编译 Bazel 部分的列表中介绍了各种语言支持工具。

如需详细了解代码库,请参阅 Bazel 代码库

搜索 Bazel 的源代码

如需快速搜索 Bazel 的源代码,请使用 Bazel 代码搜索。您可以浏览 Bazel 的代码库、分支和文件。您还可以查看历史记录、差异和追责 (Blame) 信息。如需了解详情,请参阅 Bazel 代码搜索用户指南