Bazel 7 新特性总结
在 BazelCon 23 上,Bazel 7 正式发布,引入了多项新特性,这些特性经过了多年的开发,主要包含以下几个方面:
1. Bzlmod:模块化外部依赖管理系统
Bzlmod 是一个全新的模块化外部依赖管理系统,取代了旧的 WORKSPACE 机制。每个 Bazel 模块可以拥有多个版本,每个版本依赖于一组依赖项。Bzlmod 不再直接与仓库定义交互,而是从模块构建依赖图,并在图上运行扩展,从而定义仓库。
Bzlmod 现在默认启用,如果项目中没有 MODULE.bazel 文件,Bazel 会自动创建一个空的文件。为了兼容性,Bazel 7 仍然支持旧系统,但开发者应在 Bazel 8 发布前迁移到 Bzlmod。
2. Build without the Bytes (BwoB):减少远程构建数据传输
BwoB 通过仅下载部分中间文件,减少了 Bazel 在远程构建中传输的数据量。过去,Bazel 默认会下载每个动作的所有输出文件,这在大型构建中可能导致数十甚至数百 GB 的数据传输。BwoB 现在已稳定,并能够在边缘情况下可靠运行,因此成为新的默认选项。
3. Skymeld:提升多目标构建性能
Skymeld 是另一个旨在提升生产力的特性,特别针对具有多个顶层目标的构建。它引入了一种新的评估模式,消除了分析和执行阶段之间的障碍,使得目标在分析完成后可以立即独立执行,从而提升构建速度。
4. 基于平台的工具链解析
Bazel 7 现在默认启用了基于平台的工具链解析,适用于 Android 和 C++ 规则。这一变化旨在简化所有规则集中的工具链解析 API,不再需要语言特定的标志,如 --android_cpu 和 --crosstool_top。Android 项目需要停止使用旧标志 --fat_apk_cpu,转而使用 --android_platforms,并通过 @platforms//os:android 约束定义平台。
5. 其他改进
Bazel 7 还包含了许多其他改进和优化,详细信息可以参考官方发布说明。
总结来说,Bazel 7 通过引入 Bzlmod、BwoB、Skymeld 和基于平台的工具链解析等特性,显著提升了构建系统的模块化、效率和易用性,开发者应尽早适配这些新特性以充分利用其优势。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。