如何仅查询BUILD文件里deps字段声明的直接依赖?
如何仅查询Bazel BUILD文件中deps字段声明的直接依赖
假设你的BUILD文件中有如下目标定义:
java_library( name = "my-library", srcs = glob(["src/main/java/**/*.java"]), deps = [ ":some-target", "//some-package:another-target", artifact("some-maven:some-artifact"), artifact("another-maven:another-artifact"), ], )
使用bazel query deps(//:my-library)会返回源文件、平台目标等大量无关依赖,以下是两种仅获取deps字段直接声明内容的方法:
方法一:使用buildozer工具(推荐)
buildozer是Bazel官方提供的BUILD文件操作工具,可直接提取目标的属性内容,执行以下命令:
buildozer 'print deps' //:my-library
执行后会直接输出deps字段内的所有声明项,结果与你期望的完全一致,包括artifact()类型的Maven依赖。
方法二:使用bazel query结合过滤规则
如果不想额外安装工具,可通过bazel query的过滤逻辑实现:
- 提取本地直接依赖:
bazel query 'direct_deps(//:my-library) except deps(srcs(//:my-library))'
- 单独提取Maven artifact依赖:
bazel query 'kind(maven_artifact, direct_deps(//:my-library))'
将两个命令的结果合并,即可得到deps字段内的所有直接依赖。
内容的提问来源于stack exchange,提问作者ugabade
相关产品推荐
相关产品推荐

