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

如何列出Bazel构建的Envoy静态二进制的外部依赖信息?

获取Envoy静态二进制嵌入的外部依赖信息

方法1:使用Envoy官方依赖清单工具

Envoy自带了专门生成生产依赖清单的脚本,可直接排除测试依赖并提取所需信息,操作步骤如下:

  1. 进入Envoy仓库根目录
  2. 执行以下命令:
bazel run @envoy//tools/dependency:list_repositories -- --include_license --exclude_test

该命令会输出envoy-static目标实际嵌入的所有外部依赖,包含名称、版本、许可证类型及对应仓库信息。

方法2:结合构建参数过滤repository_locations.bzl数据

已知bazel/repository_locations.bzl存储了所有依赖元数据,可配合构建参数筛选出实际编译进二进制的依赖:

  1. 先获取envoy-static关联的所有外部仓库:
bazel query 'deps(@envoy//source/exe:envoy-static, 1)' | grep -E '@[a-zA-Z0-9_-]+//' | cut -d'/' -f1 | sort | uniq

此命令会列出目标直接和间接依赖的外部仓库名称。
2. 对照repository_locations.bzl中的REPOSITORY_LOCATIONS字典,提取这些仓库的版本和许可证信息。若需自动化处理,可编写简单Python脚本解析.bzl文件,匹配第一步得到的仓库名,输出结构化结果。

方法3:用Bazel cquery精准分析构建依赖

使用Bazel的cquery命令(针对实际构建场景的依赖分析工具),结合你的构建参数获取精确依赖:

bazel cquery --define google_grpc=disabled --@envoy//bazel:http3=False --@envoy//source/extensions/wasm_runtime/v8:enabled=false 'deps(@envoy//source/exe:envoy-static)' --output=starlark --starlark:expr='"\n".join([repo.split("//")[0][1:] for repo in dir(attrs) if repo.startswith("@")])' | sort | uniq

该命令会基于你的实际构建配置,输出被编译进二进制的所有外部仓库,之后可结合repository_locations.bzl提取详细的版本和许可证信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:06:08