首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从本地文件中模拟http_archive

如何从本地文件中模拟http_archive
EN

Stack Overflow用户
提问于 2020-10-06 20:13:43
回答 2查看 905关注 0票数 1

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

代码语言:javascript
复制
root/
|- WORKSPACE
|- BUILD
|- rules.bzl
\- integration-tests/
   |- WORKSPACE
   |- BUILD

root/BUILD文件具有创建tar.gz文件的:release目标。我想在integration-tests/WORKSPACE中加载这个文件,就好像它是使用归档加载的一样。有办法这样做吗?

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

代码语言:javascript
复制
http_archive(
    urls = [
        "file://path_to_archive",
    ],
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-12 02:55:53

有办法这样做吗?

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

这甚至是正确的,尤其是跨工作区边界。您的子项目的WORKSPACE不可能直接依赖于父项目或任何其他项目的构建目标。

在这种情况下,我会考虑是否真的需要在WORKSPACE中加载发行版tarball。tarball实际上是一个Bazel存储库吗?如果是这样的话,您可能需要查看测试Bazel扩展的技术

票数 2
EN

Stack Overflow用户

发布于 2022-10-22 16:20:45

您可以使用重写命令行上的依赖项,并使用存储库的本地签出而不是http_archive

例如,给定以下WORKSPACE.bazel

代码语言:javascript
复制
workspace(name = "cli_cpp")

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
   name = "qpid-cpp",
   build_file_content = all_content,
   strip_prefix = "qpid-cpp-main",
   url = "https://github.com/apache/qpid-cpp/archive/main.zip",
)

您可以签出qpid-cpp存储库,或者下载和解压缩该存档,在其中进行更改,添加一个空的WORKSPACE.bazel文件,并在其中添加以下BUILD.bazel

代码语言:javascript
复制
filegroup(name = "all", srcs = glob(["**/*"]), visibility = ["//visibility:public"])

现在,运行Bazel和

代码语言:javascript
复制
--override_repository=qpid-cpp=/path/to/qpid-cpp
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64233192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档