概览
Bazel 社区的各位新年快乐。在新的一年里,我们计划公布 2023 年路线图的详细信息。去年,我们发布了 2022 年路线图以及 Bazel 6.0 计划。我们希望该路线图能够满足您的 build 工具需求。随着 Bazel 项目不断发展以满足您的需求,我们希望分享 2023 年的更新。
通过这些更改,我们希望让开源社区了解最新动态并参与其中。此路线图介绍了当前计划和对 Bazel 未来发展的预测,让您了解当前的优先事项和正在进行的项目。
Bazel 7.0 版本
我们计划在 2023 年底推出 Bazel 7.0 长期支持 (LTS) 版本。通过 Bazel 7.0,我们旨在交付许多正在进行的项目,并继续改进用户一直要求的各项功能。
更出色的跨平台缓存共享
支持在不同的 build 本地(Mac)和远程(Linux)build 平台之间共享缓存的工件,主要用于 Java/Kotlin 和 Android 开发,从而提高性能并高效使用缓存。
使用 Bazel 构建 Android 应用
将清单和资源合并工具更新到 v30.1.3,以便 Android 应用开发者可以使用更新的清单合并功能,例如 tools:node="merge"。
远程执行改进
Bazel 7.0 支持异步执行,通过使用标志 --jobs 提高并行度来加快远程执行速度。
Bzlmod:外部依赖项管理系统
Bzlmod 会自动解析传递依赖项,让项目在保持快速和资源高效的同时进行扩缩。Bazel 7.0 对 Bazel 的外部依赖项管理 功能进行了多项增强,包括:
- 默认启用 Bzlmod,用于在 Bazel 中进行外部依赖项管理
- 支持锁定文件,以便使用 Bzlmod 进行 hermetic build
- 支持供应商/离线模式,以便用户使用预先下载的依赖项运行 build
- 完全支持代码库缓存(不仅缓存下载的工件,还缓存最终代码库内容)
- Bazel Central Registry 包含常规社区贡献,并采用关键 Bazel 规则和项目
build 分析指标
Bazel 7.0 提供分析阶段时间指标,让开发者能够优化自己的 build 性能。
默认启用“Build without the Bytes”
“Builds without the Bytes”通过避免下载中间工件并防止 build 受网络带宽瓶颈的限制,优化了性能。新增的功能包括:
支持使用租约服务进行远程缓存逐出,以便用户在工件被过早逐出时不会遇到错误
解决符号链接支持方面的功能差距
提供从远程操作检索中间输出的选项
使用 Skymeld 提高 build 效率
Bazel 7.0 引入了 Skymeld,这是一种评估模式,可缩短多目标 build 的实际运行时间。Skymeld 消除了分析阶段和执行阶段之间的障碍,从而提高了 build 速度,尤其适用于具有多个顶级目标的 build。不过,对于单目标 build,预计不会有显著差异。
Bazel 生态系统和工具
使用 Bazel 构建 Android 应用
- 将 Android 原生规则迁移到 Starlark:对于 Bazel 7.0,Android 规则会迁移到 Starlark,以便将开发与 Bazel 本身分离,并更好地支持社区贡献。此外,我们还使这些规则独立于核心 Bazel 二进制文件,以便更频繁地发布。
- 将 Android 规则迁移到 Starlark
- R8 支持:允许 Android 应用开发者使用更新的 R8 优化。
- Mobile Install:允许 Android 应用开发者通过更新版本的 Mobile Install 快速开发、测试和部署任何 Android 应用更改。
软件物料清单数据生成 (SBOM) 和 OSS 许可合规性工具
借助 Bazel,开发者可以生成数据来帮助生成 SBOM。此数据以文本或 JSON 格式输出,并且可以轻松格式化以满足 SPDX 或 CycloneDX 规范。此外,该过程还提供了用于声明 Bazel 模块所依据的许可的规则,以及围绕这些声明构建流程的工具。请参阅 GitHub 上正在进行的 rules_license 实现。
已签名的 build
Bazel 为 Windows 和 Mac 提供使用 Google 密钥签名的可信二进制文件。借助此功能,多平台开发者/开发运维人员可以识别 Bazel 二进制文件的来源,并保护其系统免受潜在恶意、未经验证的二进制文件的侵害。
将 Java、C++ 和 Python 规则迁移到 Starlark
将 Java、C++ 和 Python 规则集完全迁移到 Starlark。通过此操作,Bazel 用户可以仅派生规则集,而不是 Bazel 二进制文件代码库,从而允许用户
- 根据需要更新和自定义规则
- 独立于 Bazel 更新规则
Bazel-JetBrains* IntelliJ IDEA 支持
增量 IntelliJ 插件更新,以支持最新的 JetBrains 插件版本。
此路线图仅列出了目标,不应视为保证。我们会根据开发者和客户的反馈或新的市场机遇调整优先事项。
如需接收新功能(包括此路线图的更新)的通知,请加入 Google 群组 社区。
*Copyright © 2022 JetBrains s.r.o. JetBrains 和 IntelliJ 是 JetBrains s.r.o 的注册商标