不同项目中Bazel外部依赖关系的不同名称

时间:2017-11-14 01:58:38

标签: bazel

假设有两个Bazel项目,它们都依赖于Python包six

项目A增加了六个名称为six_1_10_0

的项目
new_http_archive(
    name = "six_1_10_0"
    ...
)

py_binary(
    name = "lib_a",
    deps = ["@six_1_10_0//:six"]
)

项目B增加了六个名称为six_archive

new_http_archive(
    name = "six_archive"
    ...
)

py_binary(
    name = "lib_b",
    deps = ["@six_archive//:six"]
)

在我的项目中,我依赖于A和B.有没有办法让他们使用相同的six

1 个答案:

答案 0 :(得分:1)

要更改依赖项的BUILD文件内容,我能想到的最简单方法是使用new_*存储库规则之一(例如new_git_repository)。使用build_filebuild_file_content属性编写新的BUILD文件,编写一个新的py_binary规则,其deps包含您的规范@six存储库,并保持所有其他属性相同。

没有一种直接的方法可以做到这一点,因为Bazel没有假设项目A使用与项目B相比的six的不同版本。

Bazel知道他们使用相同版本的唯一方法是两个new_http_archive规则都指定相同的SHA校验和。如果它们是相同的校验和,则可以使用--experimental_repository_cache=/some/path来避免两次下载相同的存档。