Bazel 路线图

报告问题 查看源代码

概览

祝我们的 Bazel 社区新年快乐。新的一年,我们计划提供 2023 年路线图的详细信息。去年,我们发布了附带 Bazel 6.0 计划的 2022 年路线图。希望我们提供的路线图能满足您的构建工具需求。为响应您的需要,Bazel 项目不断发展完善,因此我们特意分享 2023 年的最新动态。

我们希望通过这些变更,让开源社区及时了解最新信息。本路线图介绍了当前计划以及 Bazel 开发的未来预测,可帮助您了解当前的优先事项和正在进行的项目。

Bazel 7.0 版本

我们计划于 2023 年底为您提供 Bazel 7.0 长期支持 (LTS)。Bazel 7.0 旨在提供许多进行中的项目,并继续改进用户呼声最高的功能。

更好的跨平台缓存共享

使缓存的工件能够跨不同的本地 build (Mac) 和远程 (Linux) build 平台共享(主要用于 Java/Kotlin 和 Android 开发),从而提升性能和高效使用缓存。

使用 Bazel 构建 Android 应用

Manifest & Resource Merger 更新为 v30.1.3,以便 Android 应用开发者能够使用 tools:node="merge" 等较新的清单合并功能。

远程执行改进

Bazel 7.0 提供了对异步执行的支持,并通过使用 --jobs 标志增加并行性来加快远程执行速度。

Bzlmod:外部依赖项管理系统

Bzlmod 会自动解析传递依赖项,使项目能够扩缩,同时保持快速和资源高效。Bazel 7.0 包含多项对 Bazel 外部依赖项管理功能的增强功能,包括:

  • 针对 Bazel 中的外部依赖项管理,Bzlmod 默认处于启用状态
  • 锁定文件支持 - 使用 Bzlmod 启用封闭构建
  • 供应商/离线模式支持 - 允许用户运行具有预先下载的依赖项的 build
  • 完整的代码库缓存支持(缓存下载工件,还可以缓存最终的代码库内容)
  • Bazel 中央注册表包括定期贡献社区以及对关键 Bazel 规则和项目的采用

build 分析指标

Bazel 7.0 提供了分析阶段时间指标,可让开发者优化自己的构建性能。

默认在不启用 Bytes 的情况下构建

不使用字节的构建可以避免下载中间工件并防止构建避免网络带宽瓶颈,从而优化性能。添加的功能包括:

  • 通过租用服务支持远程缓存逐出,这样一来,在提前逐出工件时用户就不会遇到错误

  • 解决了符号链接支持方面的功能缺口

  • 提供用于检索远程操作中输出内容的选项

利用 Skymeld 提升工作效率

Bazel 7.0 引入了 Skymeld,这是一种评估模式,可缩短多目标构建的实际时间。Skymeld 消除了分析和执行阶段之间的障碍,以提高构建速度,尤其是对于具有多个顶级目标的构建。不过,对于单目标 build,预计不会有显著差异。

Bazel 生态系统和工具

使用 Bazel 构建 Android 应用

  • 将 Android 原生规则迁移到 Starlark:对于 Bazel 7.0,Android 规则迁移到了 Starlark,以便将开发与 Bazel 本身分离开来,并更好地实现社区贡献。此外,我们将这些规则设置为独立于核心 Bazel 二进制文件,以便提高发布频率。
  • 将 Android 规则迁移到 Starlark
  • R8 支持:允许 Android 应用开发者使用 R8 更新的优化功能。
  • 移动安装:让 Android 应用开发者能够通过更新后的移动安装版本快速开发、测试和部署任何 Android 应用更改。

软件物料清单数据生成 (SBOM) 和 OSS 许可合规性工具

借助 Bazel,开发者可以生成数据,以帮助生成 SBOM。这些数据会以文本或 JSON 格式输出,并且可轻松设置格式以符合 SPDXCycloneDX 规范。此外,该流程还提供了用于声明提供 Bazel 模块的许可的规则,以及用于围绕这些声明构建流程的工具。请参阅 GitHub 上正在进行的 rules_license 实现

签名 build

Bazel 可为使用 Google 密钥签名的 Windows 和 Mac 提供可信的二进制文件。借助此功能,多平台开发者/dev-ops 可以识别 Bazel 二进制文件的来源,并保护其系统免受可能未经验证的恶意二进制文件的侵扰。

将 Java、C++ 和 Python 规则迁移到 Starlark

完成 Java、C++ 和 Python 规则集到 Starlark 的迁移。这项操作允许 Bazel 用户仅复刻规则集,而不能复刻 Bazel 二进制代码库,这让用户可以

  • 根据需要更新和自定义规则
  • 更新独立于 Bazel 的规则

Bazel-JetBrains* IntelliJ IDEA 支持

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

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

要接收关于新功能(包括本路线图更新)的通知,请加入 Google 网上论坛社区。

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