本页介绍如何开始向 Bazel 贡献代码。其中介绍了如何设置编码环境,介绍了如何创建 IntelliJ 项目,并指导您编译和调试项目。
设置环境后,您可以快速了解 Bazel 代码库的结构、如何搜索和浏览代码,以及如何使用 Bazel 的持续集成系统监控构建。
如何为 Bazel 源代码做贡献?
Bazel 是一个大型项目,更改 Bazel 源代码可能很困难。
在更改之前,请创建 GitHub 问题或发送电子邮件至 Bazel-dev@。
最有用的贡献可以修复错误或添加功能(而不是样式、重构或“清理”更改)。您的更改应包括测试和文档,并牢记向后兼容性、可移植性和对内存使用情况和性能的影响。
如需了解如何提交更改,请参阅补丁程序接受流程。
安装 Bazel
开始开发之前,您需要执行以下操作:
在系统上安装最新版本的 Bazel。如需了解相关说明,请参阅从源代码编译 Bazel。
从 GitHub 克隆 Bazel 的 Git 代码库:
git clone https://github.com/bazelbuild/bazel.git
安装所有遗漏的前提条件。
尝试构建 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,请执行以下操作:
- 安装 Bazel 的 IntelliJ 插件。
- 在插件偏好设置 (
Preferences
>Other Settings
>Bazel Settings
) 中设置 Bazel 二进制文件的路径。 - 使用以下设置将 Bazel 工作区导入为 Bazel 项目 (
File
>Import Bazel Project...
):- 使用现有的 Bazel 工作区:选择克隆的 Git 代码库。
- 选择
Import from workspace
,然后选择scripts/ij.bazelproject
文件作为Project view
。
- 下载 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 时:
- 使用
bazel build //:bazel-distfile
构建分发归档。 - 将归档文件解压缩到新的空目录中。
- 在此处运行
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++ 客户端,请照常从 gdb
或 lldb
运行该客户端。但是,如需调试 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/java
和src/test/java
中。 - Java 原生接口位于
src/main/native
中。 - 编译 Bazel 部分的列表中介绍了各种语言支持工具。
如需详细了解代码库,请参阅 Bazel 代码库。
搜索 Bazel 的源代码
如需快速搜索 Bazel 的源代码,请使用 Bazel 代码搜索。您可以浏览 Bazel 的代码库、分支和文件。您还可以查看历史记录、差异和追责 (Blame) 信息。如需了解详情,请参阅 Bazel 代码搜索用户指南。