Bazel 是一款快速、正确且可扩展的构建工具,具有集成测试功能,支持业界领先的生态系统中的多种语言、代码库和平台。
Bazel 速度快
Bazel 确切知道每个 build 命令需要哪些输入文件,因此只会在每次 build 之间一组输入文件发生更改时重新运行,从而避免不必要的工作。它会尽可能并行运行 build 命令,无论是在同一台计算机上还是在远程 build 节点上。如果构建结构允许,它可以同时运行数千个构建或测试命令。
内存、磁盘和远程 build 农场(如果有)中的多个缓存层都支持此功能。Google 通常可实现高于 99% 的缓存命中率。
Bazel 正确无误
Bazel 可确保二进制文件仅由您自己的源代码构建而成。Bazel 操作在各个沙盒中运行,并且 Bazel 会跟踪 build 的每个输入文件,仅在需要时才会重新运行 build 命令。这样可以确保您的二进制文件保持最新状态,以便相同的源代码始终生成相同的二进制文件。
告别无休止的 make clean
调用,告别追逐实际上已在从未构建的源代码中解决的幻影 bug。
Bazel 是可扩展的
编写您自己的规则和宏,根据您在各种项目中的具体需求自定义 Bazel,充分利用 Bazel 的强大功能。
Bazel 规则是使用 Starlark 编写的,Starlark 是我们内部使用的编程语言,是 Python 的子集。Starlark 让大多数开发者都可以编写规则,同时还能创建可在整个生态系统中使用的规则。
集成测试
Bazel 的集成测试运行程序仅知道并运行需要重新运行的测试,并使用远程执行(如果可用)来并行运行这些测试。使用远程执行快速运行数千次测试,以便尽早检测到故障。
Bazel 提供了一些工具,可将测试结果上传到中央位置,从而便于高效地传达测试结果,无论是在 CI 上还是由各个开发者传达。
多语言支持
Bazel 支持许多常见的编程语言,包括 C++、Java、Kotlin、Python、Go 和 Rust。您可以在同一 Bazel 调用中构建多个二进制文件(例如后端、Web 界面和移动应用),而无需局限于一种语言的惯用构建工具。
多仓库支持
Bazel 可以从多个位置收集源代码:您无需将依赖项作为供应商提供(但可以这样做!),而是可以将 Bazel 指向源代码或预构建工件的所在位置(例如 git 代码库或 Maven Central),Bazel 会负责其余工作。
多平台支持
Bazel 可以同时为多个平台(包括 Linux、macOS、Windows 和 Android)构建项目。它还提供强大的跨编译功能,可在一个平台上构建代码,同时在另一个平台上运行该 build。
广泛的生态系统
行业领军者非常喜欢 Bazel,并建立了一个由使用和贡献 Bazel 的开发者组成的庞大社区。查找工具、服务和文档,包括 Bazel 可用的咨询服务和 SaaS 产品。在我们的开源软件代码库中探索扩展程序,例如对编程语言的支持。