Bazel fetch是否支持排除目标?语法报错问题咨询
Bazel Fetch 无法用减号排除目标的问题解决
你碰到的这个情况我之前也遇到过——bazel fetch 并不支持像 bazel build 那样直接用 - 前缀来排除目标,这是因为两个命令的目标解析逻辑不一样,build 支持的目标模式减法并没有被 fetch 兼容,所以你才会看到那个语法错误。
不过别担心,有几个实用的 workaround 可以解决这个问题:
用
--target_pattern_file批量指定目标:
创建一个文本文件,把你要包含和排除的目标每行写一个,排除的目标前面加-就行。比如创建targets_to_fetch.txt,内容如下://... -//some/target/...然后执行命令:
bazel fetch --target_pattern_file=targets_to_fetch.txt这个方式和
build的写法逻辑一致,用起来很顺手。显式指定需要拉取的目标:
如果你清楚哪些目标是必须要fetch的,直接把这些目标列出来,不用全量的//...通配符。比如:bazel fetch //src/app/... //src/libs/...这种方式虽然不够灵活,但简单直接,适合排除目标范围很小的场景。
结合
bazel query动态筛选目标:
这是最灵活的方式,先用bazel query筛选出你需要的目标集合,再把结果传给fetch命令:bazel fetch $(bazel query '//... except //some/target/...')query会帮你计算出排除指定目标后的所有目标,再让fetch去拉取这些目标的依赖。
顺带提一句,这个语法差异是因为fetch命令的早期设计没考虑目标模式减法,社区里也有不少人提过需求,但目前官方还没把这个特性集成进去,所以上面的方法是当前最靠谱的解决方案。
内容的提问来源于stack exchange,提问作者Vertexwahn
相关产品推荐
相关产品推荐

