首页 > 解决方案 > 如何从本地文件模拟 http_archive

问题描述

我有实现 bazel 规则的主项目和模拟最终用户体验的子项目。在子项目中,我想加载在主项目中创建的存档,就好像它是使用 http_archive 加载的一样。这是回购设置示例:

root/
|- WORKSPACE
|- BUILD
|- rules.bzl
\- integration-tests/
   |- WORKSPACE
   |- BUILD

root/BUILD文件具有:release创建 tar.gz 文件的目标。我想在里面加载这个文件,integration-tests/WORKSPACE就好像它是使用 [http_archive][1] 加载的一样。有没有办法做到这一点?


我发现的简单方法是使用:

http_archive(
    urls = [
        "file://path_to_archive",
    ],
)

标签: bazel

解决方案


有没有办法做到这一点?

严格来说,不,没有办法做到这一点。像这样的存储库规则在构建的加载阶段http_archive执行,而构建输出是在执行阶段创建的。存储库规则不能依赖于构建目标,因为该目标尚未构建。

这甚至是真实的,尤其是跨越工作空间边界。您的子项目WORKSPACE无法直接依赖父项目或任何其他项目的构建目标。

在这种情况下,我会考虑您是否真的需要在WORKSPACE. tarball 实际上是 Bazel 存储库吗?如果是这样,您可能想研究测试 Bazel 扩展的技术


推荐阅读