我有一个mutli-module项目,我将从Maven迁移到Bazel。在此迁移过程中,人们需要能够在两个构建系统上工作。
mvn clean install
Maven将部分BUILD
文件复制到target
文件夹中。
当我稍后尝试运行bazel build //...
时,它认为各种 BUILD
文件夹下的target
文件是有效的包,并且由于某些不匹配而失败。
我已经看过deleted_packages
,但AFAICT需要我指定文件夹列表以及#34;删除"虽然我不能为200多个模块做到这一点
我正在寻找说bazel build //... --deleted_packages=**/target
的能力
这支持吗? (我的实验说不是,但我可能错了)。如果它不受支持是否存在现有的黑客攻击?
答案 0 :(得分:3)
您可以使用shell查找要忽略的软件包列表吗?
deleted=$(find . -name target -type d)
bazel build //... --deleted_packages="$deleted"
答案 1 :(得分:3)
@Laurent的回答让我领先,但Bazel不接受相对路径,并要求我在classes
下添加test-classes
和target
个文件夹以删除包裹,所以我决定回答完整的解决方案:
#!/bin/bash
#find all the target folders under the current working dir
target_folders=$(find . -name target -type d)
#find the repo root (currently assuming it's git based)
repo_root=$(git rev-parse --show-toplevel)
repo_root_length=${#repo_root}
#the current bazel package prefix is the PWD minus the repo root and adding a slash
current_bazel_package="/${PWD:repo_root_length}"
deleted_packages=""
for target in $target_folders
do
#cannonicalize the package path
full_package_path="$current_bazel_package${target:1}"
classes_full="${full_package_path}/classes"
test_classes_full="${full_package_path}/test-classes"
deleted_packages="$deleted_packages,$classes_full,$test_classes_full"
done
#remove the leading comma and call bazel-real with the other args
bazel-real "$@" --deleted_packages=${deleted_packages:1}
此脚本已在tools/bazel
下签到,这就是为什么它最后会调用bazel-real
。
答案 2 :(得分:1)
对不起,我不认为这是支持的。一些头脑风暴: