Bazel 路线图

概览

Bazel 项目会根据您的需求不断发展变化:开发功能、提供支持,同时维护、重构和改进核心产品的性能。

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

此路线图概况针对的是,不应作为保证。优先事项可能会根据开发者和客户的反馈或者新的市场机遇而发生变化。

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

问题 4 - Bazel 6.0 版本

第 4 季度推出 Bazel 6.0,这是新的长期支持 (LTS) 版本。Bazel 6.0 计划加入一些强大的新功能,这些功能有助于管理依赖项、使用 Android 进行开发等。

Bzlmod:外部依赖项管理系统

Bzlmod 会自动解析传递依赖项,使项目能够扩缩,同时保持快速和资源效率。Bzlmod 是在 Bazel 5.0 中实验性引入的,届时 Bzlmod 将正式发布,并且可以针对 diamond 依赖项问题提供解决方案。

  • Bzlmod 从“实验性”变为“正式版”
  • 支持 rules\_jvm\_external,允许用户下载 Java 项目的 Maven 依赖项
  • Bzlmod 迁移指南为希望采用 Bzlmod 的团队提供了工具、脚本和文档
  • Bazel 中央代码库托管了 Bzlmod 所需的核心 Bazel BUILD 规则(rules\_jvm\_externalrules\_gorules\_pythonrules\_nodejs)和关键依赖项

如需详细了解此开发,请观看 Bzlmod 社区更新或阅读原始设计文档

使用 Bazel 构建 Android 应用

Bazel 6.0 将包含经过改进的工具,并包含社区功能贡献。鉴于 Bazel 团队的进一步普及以及代码库日益壮大,将优先考虑将 Android 构建工具与 Bazel Android 规则集成。

  • 将 D8 更新为 3.3.28 版,并将其设置为默认 dexer
  • 合并到 5.X 中增加的主要社区功能贡献,包括对以下内容的支持:
    • 使用 D8 的持久性工作器
    • 使用 D8 进行脱糖
    • 合并 Android 清单中的“uses-permissions”标记
    • Android 资源处理中的多重工作器

可选工具链

我们的开发者满意度调查表明,规则作者希望获得支持进一步开发工具链所需的。Bazel 6.0 允许作者使用可选的高性能工具链(如果具有适用于其他平台的回退实现)编写规则。

Bazel-JetBrains* IntelliJ IDEA 支持

JetBrains 与 Bazel 合作,共同维护 Bazel IntelliJ IDEA 插件,以支持加强社区管理以及开放功能请求和开发能力的目标。

  • IntelliJ 插件 v. 2022.2 支持最新 JetBrains 插件版本
  • 提高与远程开发的兼容性
  • 进一步推动社区推动开发机上功能(例如 Scala 支持)

如需详细了解此开发,请参阅 Bazel-JetBrains 博客公告

未来开发

展望未来,Bazel 团队已经开始开发,或预计在 2023 年及之后会优先考虑以下功能。

改进 Bazel 的 Android 构建规则

继续在 Android 应用开发体验上投入,重点关注从构建、测试和部署开始的工作流。

  • 迁移到 R8 并支持 R8
  • 更新了 Android 规则,包括翻译为 Starlark 语言
  • 支持 App Bundle
  • 支持最新的 NDK 版本
  • 测试代码覆盖率

OSS 许可合规性工具

开发者要求使用强大的许可合规性检查工具,以确保所含软件包的可用性和安全性。此项目提供了一组规则和工具,有助于识别和降低与给定软件组件相关的合规与许可风险。目标功能包括:

  • 能够审核给定目标使用的软件包
  • 能够构建组织专属的许可合规性检查。

在 GitHub 上查看正在进行中的 rules_license 实现

Bzlmod:外部依赖项管理系统

在发布时,Bzlmod 提高了传递依赖项的可伸缩性和可靠性。在未来三年内,Bzlmod 的目标是取代 WORKSPACE,成为默认的 Bazel 工作区依赖项管理子系统。目标功能包括:

  • 支持封闭 build
  • 供应商/离线模式将版本化引用规则固定到本地副本
  • Bazel 中央注册表包含定期社区贡献以及对关键 Bazel 规则和项目的采用
  • Bzlmod 成为构建 Bazel 项目的默认工具

签名 build

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

标准化平台 API

新的 Platforms API 将为多语言、多平台 build 实现架构配置标准化。借助此功能,开发者可以减少大型构建过程中代价高昂的开发时间错误和复杂性。

build 分析指标

Bazel 遥测将提供分析阶段时间指标,让开发者能够优化自己的构建性能。

通过“Builds without the Bytes”(无需字节的构建)远程执行

不含字节的构建将仅允许 Bazel 下载所需的工件,从而防止构建遇到网络带宽瓶颈,从而优化性能。为远程构建添加的功能包括:

  • 使用异步下载功能,让本地操作和远程操作在下载相关输出内容后立即执行
  • 添加符号链接支持
  • 构建完成后从远程操作检索中间输出

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