Bazel-如何以递归方式将deleted_pa​​ckages浮动以忽略maven输出?

时间:2017-06-19 05:32:18

标签: bazel

我有一个mutli-module项目,我将从Maven迁移到Bazel。在此迁移过程中,人们需要能够在两个构建系统上工作。

mvn clean install Maven将部分BUILD文件复制到target文件夹中。
当我稍后尝试运行bazel build //...时,它认为各种 BUILD文件夹下的target文件是有效的包,并且由于某些不匹配而失败。

我已经看过deleted_packages,但AFAICT需要我指定文件夹列表以及#34;删除"虽然我不能为200多个模块做到这一点 我正在寻找说bazel build //... --deleted_packages=**/target的能力 这支持吗? (我的实验说不是,但我可能错了)。如果它不受支持是否存在现有的黑客攻击?

3 个答案:

答案 0 :(得分:3)

您可以使用shell查找要忽略的软件包列表吗?

deleted=$(find . -name target -type d)
bazel build //... --deleted_packages="$deleted"

答案 1 :(得分:3)

@Laurent的回答让我领先,但Bazel不接受相对路径,并要求我在classes下添加test-classestarget个文件夹以删除包裹,所以我决定回答完整的解决方案:

#!/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)

对不起,我不认为这是支持的。一些头脑风暴:

  • 是否可以选择将maven输出指向其他地方?
  • 可以选择不使用// ...而是使用明确的目标吗?
  • 也许只是在运行bazel之前删除坏的BUILD文件?