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(请参阅 Bazel 7.1 中提供的 #21435)。
  • 改进了用于生成规范代码库名称的方案,以便更好地跨依赖项版本更新缓存操作。(#21316,在 Bazel 7.1 中提供)
  • 改进了共享代码库缓存(请参阅 #12227)。
  • 供应商和离线模式支持 - 允许用户使用预先下载的依赖项运行 build(请参阅 #19563)。
  • 减少了锁定文件中的合并冲突 (#20396)。
  • 细分的 MODULE.bazel (#17880)
  • 允许替换模块扩展生成的代码库 (#19301)
  • 改进了文档(例如 #18030#15821)以及迁移指南和迁移工具。

远程执行改进

  • 添加了对异步执行的支持,使用 --jobs 标志提高了并行性,从而加快了远程执行速度。
  • 通过新的紧凑执行日志,更轻松地调试缓存未命中问题,大幅缩减其大小,并显著缩减运行时开销(请参阅 #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()

可配置性

  • 输出路径映射继续稳定:承诺为使用转换的规则设计人员承诺更好的远程缓存性能,并加快构建速度。
  • 自动设置适合给定 --platforms 的 build 标志。
  • 定义项目支持的标志组合并使用默认标志自动构建目标,而无需设置 bazelrcs。
  • 不要在每次构建标志发生更改时重新执行构建分析。

Project Skyfocus - 尽量减少保留的数据结构

Bazel 会在 RAM 中保存大量状态,以实现快速增量构建。不过,开发者经常会更改一小部分源文件(例如,几乎从不更改一个外部依赖项)。借助 Skyfocus,Bazel 会提供一种实验性方法,以舍弃不必要的增量状态并减少 Bazel 占用的内存,同时仍提供同样快速的增量构建体验。

初始范围仅旨在改进保留的堆指标。有可能减少峰值堆,但这并未包含在初始范围内。

其他

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

Bazel-JetBrains* IntelliJ IDEA 支持

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

此路线图快照的目标对象,不应作为保证。优先级可能会根据开发者和客户的反馈或市场出现的新机遇而发生变化。

如需接收有关新功能的通知,包括此路线图的更新,请加入 Google 网上论坛社区。

*版权所有 © 2022 JetBrains s.r.o. JetBrains and IntelliJ 是 JetBrains s.r.o 的注册商标