Bazel 路线图

概览

随着 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_androidrules_ccrules_javarules_pythongoogle/protobufrules_proto 将被弃用。

Bazel 8 将提供一个临时迁移标志,该标志将自动使用之前属于二进制文件的规则集(来自其代码库)。这些规则集的所有用户最终都应依赖于其代码库,并以类似于加载从未属于 Bazel 的其他规则集的方式加载它们。

Bazel 8 还将改进现有的扩展规则和子规则 API,并将其标记为非实验性。

Starlark 改进

  • 符号宏是一种新的宏编写方式,对 BUILD 用户、宏作者和工具更加友好。与 Bazel 只能有限了解的旧版宏相比,符号宏有助于用户避免常见误区并强制执行最佳实践。
  • 软件包最终确定器是一项拟议功能,用于为自定义软件包验证逻辑添加一流的支持。它们旨在帮助我们弃用 native.existing_rules()

可配置性

  • 输出路径映射继续趋于稳定:为使用转换的规则设计者提供更好的远程缓存性能和 build 速度。
  • 自动设置适合给定 --platforms 的 build 标志。
  • 定义项目支持的标志组合,并使用默认标志自动构建目标,而无需设置 bazelrc。
  • 每次 build 标志更改时,无需重新执行 build 分析。

Skyfocus 项目 - 尽可能减少保留的数据结构

Bazel 在 RAM 中保留大量状态,以便快速进行增量 build。但是,开发者通常会更改源文件的一小部分(例如,几乎从不更改外部依赖项之一)。借助 Skyfocus,Bazel 将提供一种实验性方法来删除不必要的增量状态并减少 Bazel 的内存占用空间,同时仍提供相同的快速增量 build 体验。

初始范围旨在仅改进保留的堆指标。峰值堆减少是可能的,但不包含在初始范围中。

其他

  • 移动安装 v3,一种更简单且维护更好的方法,用于增量部署 Android 应用。
  • 针对代码库缓存和 Bazel 的 install_base 进行垃圾回收。
  • 减少了沙盒开销。

Bazel-JetBrains* IntelliJ IDEA 支持

增量 IntelliJ 插件更新,以支持最新的 JetBrains 插件版本。

此路线图仅列出了目标快照,不应将其视为保证。 优先事项可能会根据开发者和客户反馈或新的市场机遇而发生变化。

如需接收新功能(包括此路线图的更新)的通知,请加入 Google 群组社区。

*Copyright © 2022 JetBrains s.r.o. JetBrains and IntelliJ are registered trademarks of JetBrains s.r.o