我有实现bazel规则的主项目和模拟最终用户体验的子项目。在子项目中,我希望加载主项目中创建的归档文件,就好像它是使用http_archive加载的一样。下面是回购设置示例:
root/
|- WORKSPACE
|- BUILD
|- rules.bzl
\- integration-tests/
|- WORKSPACE
|- BUILDroot/BUILD文件具有创建tar.gz文件的:release目标。我想在integration-tests/WORKSPACE中加载这个文件,就好像它是使用归档加载的一样。有办法这样做吗?
我发现的最简单的方法是使用:
http_archive(
urls = [
"file://path_to_archive",
],
)发布于 2020-10-12 02:55:53
有办法这样做吗?
严格地说,没有办法做到这一点。存储库规则(如http_archive )是在构建的加载阶段期间执行的,而构建输出是在执行阶段期间创建的。存储库规则不能依赖于构建目标,因为该目标尚未构建。
这甚至是正确的,尤其是跨工作区边界。您的子项目的WORKSPACE不可能直接依赖于父项目或任何其他项目的构建目标。
在这种情况下,我会考虑是否真的需要在WORKSPACE中加载发行版tarball。tarball实际上是一个Bazel存储库吗?如果是这样的话,您可能需要查看测试Bazel扩展的技术。
发布于 2022-10-22 16:20:45
您可以使用重写命令行上的依赖项,并使用存储库的本地签出而不是http_archive。
例如,给定以下WORKSPACE.bazel
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
filegroup(name = "all", srcs = glob(["**/*"]), visibility = ["//visibility:public"])现在,运行Bazel和
--override_repository=qpid-cpp=/path/to/qpid-cpphttps://stackoverflow.com/questions/64233192
复制相似问题