概览
随着 Bazel 项目不断发展以满足您的需求,我们想分享一下 2024 年的更新。
此路线图介绍了当前的计划和对未来 Bazel 开发的预测,让您可以了解当前的优先事项和正在进行的项目。
Bazel 8.0 版本
我们计划在 2024 年末为您带来 Bazel 8.0 长期支持 (LTS) 版本。 我们计划实现以下功能。
Bzlmod:外部依赖项管理系统
Bzlmod 会自动解析传递依赖项,使项目能够扩展,同时保持快速且资源高效。
在 Bazel 8 中,我们将默认停用 WORKSPACE 支持(仍可使用 --enable_workspace
启用该支持);在 Bazel 9 中,我们将移除 WORKSPACE 支持。从 Bazel 7.1 开始,您可以设置 --noenable_workspace
以选择启用新行为。
Bazel 8.0 将对 Bazel 的外部依赖项管理功能进行多项增强,包括:
- 新标志
--enable_workspace
可设置为false
以完全停用 WORKSPACE 功能。 - 新的目录监控 API(请参阅 #21435,已在 Bazel 7.1 中发布)。
- 改进了用于生成规范代码库名称的方案,以提高依赖项版本更新时操作的可缓存性。 (#21316,已在 Bazel 7.1 中发布)
- 改进了共享代码库缓存(请参阅 #12227)。
- 供应商和离线模式支持 - 允许用户运行具有预下载依赖项的 build(请参阅 #19563)。
- 减少了锁定文件中的合并冲突 (#20396)。
- 分段式 MODULE.bazel (#17880)
- 允许替换模块扩展生成的代码库 (#19301)
- 完善了文档(例如 #18030、#15821)以及迁移指南和迁移工具。
改进了远程执行
- 添加了对异步执行的支持,通过使用标志
--jobs
提高并行性来加快远程执行速度。 - 通过新的紧凑型执行日志,更轻松地调试缓存未命中问题,将日志大小缩减 100 倍,并显著降低其运行时开销(请参阅 #18643)。
- 为磁盘缓存实现垃圾回收(请参阅 #5139)。
- 实现远程输出服务,以允许延迟下载任意 build 输出(请参阅 #20933)。
迁移 Android、C++、Java、Python 和 Proto 规则
将 Android、C++、Java 和 Python 规则集完全迁移到专用代码库,并将其与 Bazel 版本分离。这项工作让 Bazel 用户和规则作者能够
- 独立于 Bazel 更新规则。
- 根据需要更新和自定义规则。
规则集的新位置将为 bazelbuild/rules_android
、rules_cc
、rules_java
、rules_python
和 google/protobuf
。rules_proto
即将被弃用。
Bazel 8 将提供一个临时迁移标志,该标志会自动使用之前属于二进制文件的规则集(来自其代码库)。这些规则集的所有用户最终都应依赖于其代码库,并以类似于从未成为 Bazel 一部分的规则集的方式加载它们。
Bazel 8 还会改进现有的扩展规则和子规则 API,并将其标记为非实验性。
Starlark 改进
- 符号宏是一种新的宏编写方式,对
BUILD
用户、宏作者和工具更加友好。与 Bazel 只能有限了解的旧版宏相比,符号宏可帮助用户避免常见陷阱并强制执行最佳实践。 - 软件包最终确定器是一项提议的功能,旨在为自定义软件包验证逻辑添加一流的支持。它们旨在帮助我们弃用
native.existing_rules()
。
可配置性
- 输出路径映射继续趋于稳定:对于使用转换的规则设计者来说,有望获得更好的远程缓存性能和构建速度。
- 自动设置适合给定
--platforms
的 build 标志。 - 定义项目支持的标志组合,并使用默认标志自动构建目标,而无需设置 bazelrc。
- 不要在每次 build 标志更改时都重新进行 build 分析。
Project Skyfocus - 尽可能减少保留的数据结构
Bazel 会在 RAM 中保存大量状态,以实现快速增量构建。不过,开发者通常只会更改一小部分源文件(例如,几乎从不更改外部依赖项)。借助 Skyfocus,Bazel 将提供一种实验性方法来舍弃不必要的增量状态并减少 Bazel 的内存占用空间,同时仍能提供相同的快速增量 build 体验。
初始范围仅旨在改进保留堆指标。可能会减少峰值堆内存,但未纳入初始范围。
其他
- 移动安装 v3,一种更简单且维护得更好的增量部署 Android 应用的方法。
- 针对代码库缓存和 Bazel 的
install_base
进行垃圾回收。 - 降低了沙盒开销。
Bazel-JetBrains* IntelliJ IDEA 支持
增量 IntelliJ 插件更新,以支持最新的 JetBrains 插件版本。
此路线图仅显示目标,不应视为保证。 我们会根据开发者和客户反馈或新的市场机遇,随时调整优先级。
如需在有新功能发布时(包括此路线图的更新)收到通知,请加入 Google 群组社区。
*版权所有 © 2022 JetBrains s.r.o. JetBrains 和 IntelliJ 是 JetBrains s.r.o 的注册商标