You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拷贝$(bazel info output_base)/external依赖到离线机器复用

Bazel 离线环境复用已拉取第三方依赖操作步骤

你可以按以下流程操作,全程不需要无网机器联网,直接复用已有缓存文件:

  • 第一步:有网环境提前拉全所有依赖
    在能正常联网编译的机器上,进入项目根目录执行bazel fetch //...,该命令会拉取项目所有构建目标依赖的全部第三方文件,包括所有http_archive定义的依赖,确保没有遗漏。执行完成后可以再跑一次全量build确认没有缺失依赖。
  • 第二步:打包需要迁移的缓存文件
    执行bazel info output_base拿到当前项目的Bazel输出根路径,该路径下的external目录就是所有第三方依赖的存放位置。同时找到Bazel全局缓存路径(默认是当前用户家目录下的~/.cache/bazel,如果自定义过BAZEL_CACHE环境变量就取对应路径)。用tar命令把这两部分内容打包,注意保留文件权限:
    tar -zcpf bazel_offline_cache.tar.gz $(bazel info output_base)/external ~/.cache/bazel
    
  • 第三步:无网机器部署缓存
    1. 先在无网机器上安装和有网机器版本完全一致的Bazel,版本不匹配会直接导致缓存哈希校验失败无法复用。
    2. 把打包好的bazel_offline_cache.tar.gz传到无网机器,解压到对应路径:
      • 先在无网机器的项目目录下执行bazel info output_base拿到无网环境的输出根路径,把解压得到的external目录完整覆盖到该路径下。
      • 把解压得到的bazel缓存内容,完整覆盖到无网机器对应用户家目录的~/.cache/bazel路径,保持原有目录结构不变。
  • 第四步:离线模式编译
    编译时加上离线参数,禁止Bazel发起网络拉取请求:
    bazel build //你的构建目标 --offline --nofetch
    
    如果需要长期使用离线配置,可以直接在项目根目录的.bazelrc文件中加入以下配置,后续执行bazel命令不需要重复加参数:
    build --offline --nofetch
    

注意事项

  • 两台机器的操作系统、CPU架构需要保持一致,平台相关的二进制依赖跨架构/跨系统无法正常使用。
  • 不要手动修改解压后的缓存文件,Bazel会对依赖做哈希校验,文件被改动后会判定缓存失效,触发拉取逻辑。
  • 如果项目中还用到了git_repository、maven_install等非http_archive的依赖拉取规则,bazel fetch //...命令也会同步拉取对应内容,不需要额外处理。

内容的提问来源于stack exchange,提问作者hustyangsan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 22:36:36