概览
祝 Bazel 社区新年快乐!新年伊始,我们计划详细介绍 2023 年路线图。去年,我们发布了 2022 年路线图,其中包含 Bazel 6.0 计划。我们希望该路线图能帮助您了解构建工具需求。为了满足您的需求,Bazel 项目将不断发展,我们想与您分享 2023 年的最新动态。
通过这些变更,我们希望让开源社区及时了解相关信息,并让所有人都能参与其中。此路线图介绍了当前的计划和对 Bazel 未来发展的预测,让您了解当前的优先事项和正在进行的项目。
Bazel 7.0 版本
我们计划于 2023 年底为您提供 Bazel 7.0 长期支持 (LTS)。我们希望通过 Bazel 7.0 实现许多正在进行的工作,并继续改进用户一直要求的功能。
更好地实现跨平台缓存共享
支持在不同的本地 build (Mac) 和远程 build (Linux) 平台之间共享缓存工件,主要用于 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 启用密封 build
- 供应商/离线模式支持 - 允许用户运行包含预下载依赖项的 build
- 完整的仓库缓存支持(不仅缓存下载的工件,还缓存最终的仓库内容)
- Bazel 中央注册库包括定期的社区贡献和关键 Bazel 规则和项目的采用
build 分析指标
Bazel 7.0 提供了分析阶段时间指标,让开发者能够优化自己的构建性能。
默认情况下,build 不启用字节
不包含字节的 build 通过避免下载中间工件并防止 build 因网络带宽而出现瓶颈,从而优化性能。新增的功能包括:
支持使用租赁服务进行远程缓存驱逐,以便在工件过早驱逐时用户不会遇到错误
解决了符号链接支持方面的功能缺口
提供用于从远程操作检索中间输出的选项
利用 Skymeld 提升工作效率
Bazel 7.0 引入了 Skymeld,这是一种评估模式,可缩短多目标 build 的实际运行时间。Skymeld 消除了分析阶段和执行阶段之间的障碍,从而提高了构建速度,尤其是对于具有多个顶级目标的构建。不过,对于单目标 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) 和开源软件许可合规性工具
借助 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 群组社区。
*版权所有 © 2022 JetBrains s.r.o。JetBrains 和 IntelliJ 是 JetBrains s.r.o 的注册商标