概览
祝 Bazel 社区新年快乐。在新的一年里,我们计划公布 2023 年路线图的详细信息。去年,我们发布了 2022 年路线图,其中包含 Bazel 6.0 计划。我们希望该路线图能帮助您了解构建工具需求。随着 Bazel 项目不断发展以满足您的需求,我们想与您分享 2023 年的更新。
通过这些变更,我们希望让开源社区及时了解最新动态并参与其中。此路线图介绍了当前计划和对未来 Bazel 开发的预测,让您了解当前优先级和正在进行的项目。
Bazel 7.0 版本
我们计划于 2023 年底推出 Bazel 7.0 长期支持 (LTS) 版本。在 Bazel 7.0 中,我们旨在交付许多正在开发中的项目,并继续改进用户一直以来要求的功能。
更出色的跨平台缓存共享
主要针对 Java/Kotlin 和 Android 开发,使缓存的制品能够在不同的本地 (Mac) 和远程 (Linux) build 平台之间共享,从而提高性能并高效使用缓存。
使用 Bazel 构建 Android 应用
清单和资源合并器更新到 v30.1.3,以便 Android 应用开发者可以使用更新的清单合并功能,例如 tools:node="merge"。
远程执行改进
Bazel 7.0 支持异步执行,通过使用标志 --jobs 提高并行性来加快远程执行速度。
Bzlmod:外部依赖项管理系统
Bzlmod 会自动解析传递依赖项,使项目能够扩展,同时保持快速且资源高效。Bazel 7.0 对 Bazel 的外部依赖项管理功能进行了一些增强,包括:
- 默认情况下,Bzlmod 已开启,用于管理 Bazel 中的外部依赖项
- 锁定文件支持 - 使用 Bzlmod 实现密封构建
- 供应商/离线模式支持 - 允许用户运行具有预下载依赖项的 build
- 完整的仓库缓存支持(不仅缓存下载的制品,还缓存最终的仓库内容)
- Bazel 中央注册表包含常规社区贡献,并采用关键的 Bazel 规则和项目
构建分析指标
Bazel 7.0 提供了分析阶段时间指标,可让开发者优化自己的 build 性能。
在默认情况下不启用“字节”的情况下构建
不含 Bytes 的 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 优化。
- 移动安装:Android 应用开发者可以通过更新版移动安装快速开发、测试和部署任何 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 的注册商标