您可以从
@bazel_tools//tools/build_defs/repo:http.bzl。
通过 HTTP 下载文件和归档的规则。
设置
要在模块扩展程序中使用这些规则,请将这些规则加载到 .bzl 文件中,然后从
扩展的实现函数。例如,如需使用 http_archive,请使用以下代码:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
def _my_extension_impl(mctx):
  http_archive(name = "foo", urls = [...])
my_extension = module_extension(implementation = _my_extension_impl)
或者,您也可以直接使用以下命令在 MODULE.bazel 文件中调用这些代码库规则
use_repo_rule:
http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(name = "foo", urls = [...])
http_archive
http_archive(name, add_prefix, auth_patterns, build_file, build_file_content, canonical_id, integrity, netrc, patch_args, patch_cmds, patch_cmds_win, patch_tool, patches, remote_file_integrity, remote_file_urls, remote_patch_strip, remote_patches, repo_mapping, sha256, strip_prefix, type, url, urls, workspace_file, workspace_file_content)
以压缩归档文件的形式下载 Bazel 代码库 并使其目标可用于绑定
它支持以下文件扩展名:"zip"、"jar"、"war"、"aar"、"tar"、
"tar.gz"、"tgz"、"tar.xz"、"txz"、"tar.zst"、"tzst"、tar.bz2、"ar"
或 "deb"。
示例:
  假设当前代码库包含聊天程序的源代码,
  位于 ~/chat-app 目录的根目录下。它需要依赖于一个 SSL 库
  可通过 http://example.com/openssl.zip 下载。这个 .zip 文件
  包含以下目录结构:
  WORKSPACE
  src/
    openssl.cc
    openssl.h
在本地代码库中,用户创建一个 openssl.BUILD 文件,该文件包含
  包含以下目标定义:
  cc_library(
      name = "openssl-lib",
      srcs = ["src/openssl.cc"],
      hdrs = ["src/openssl.h"],
  )
如果~/chat-app存储库中的目标
  以下几行代码将添加到 ~/chat-app/WORKSPACE 中:
  load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
  http_archive(
      name = "my_ssl",
      url = "http://example.com/openssl.zip",
      sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      build_file = "@//:openssl.BUILD",
  )
然后,目标会将 @my_ssl//:openssl-lib 指定为依赖项。
属性
name | 
姓名;必需
 此代码库的唯一名称。  | 
add_prefix | 
String;可选
 相对于代码库目录的目标目录。 应用“strip_prefix”后,归档文件将解压缩到此目录中 (如果有)指向归档中的文件路径。例如,文件 如果 `add_prefix = "bar"`,`foo-1.2.3/src/foo.h` 将解压缩到 `bar/src/foo.h` 和 `strip_prefix = "foo-1.2.3"`。  | 
auth_patterns | 
字典:String ->String;可选
 
将主机名映射到自定义授权格式的可选字典。
如果某个网址的主机名出现在此字典中,则该值将用作
为 http 请求生成授权标头。这样,您就可以使用
。
该模式目前支持 2 种令牌: 
auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
machine storage.cloudprovider.com
        password RANDOM-TOKEN
Authorization: Bearer RANDOM-TOKEN  | 
build_file | 
标签;可选
 要用作此代码库的 BUILD 文件的文件。此属性是绝对标签(对于主代码库,请使用“@//”)。该文件不需要命名为 BUILD,但可以(像 BUILD.new-repo-name 这样的名称可能很适合将其与代码库的实际 BUILD 文件区分开来)。可以指定 build_file 或 build_file_content,但不能同时指定这两者。  | 
build_file_content | 
String;可选
 此代码库的 BUILD 文件的内容。可以指定 build_file 或 build_file_content,但不能同时指定这两者。  | 
canonical_id | 
String;可选
 已下载文件的规范 ID。 如果已指定且非空,则 Bazel 不会从缓存中获取文件,除非该文件 由具有相同规范 ID 的请求添加到缓存。 如果未指定或为空,则默认情况下,Bazel 会将文件的网址用作 规范 ID。这有助于发现在更新网址时 同时会更新哈希值,导致构建在本地成功完成但 在没有缓存文件的计算机上可通过 --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0.  | 
integrity | 
String;可选
 所下载文件的应采用子资源完整性格式的校验和。 必须与所下载文件的校验和一致。_这是安全风险 因为远程文件可能会更改,所以最好省略此 字段会使您的 build 变得非封闭。如果需要进行开发 但在发货前应设置此属性或 `sha256`。  | 
netrc | 
String;可选
 用于身份验证的 .netrc 文件的位置  | 
patch_args | 
字符串列表;可选
 为修补工具指定的参数。默认为 -p0,但是 git 生成的补丁通常需要 -p1。如果指定了多个 -p 参数,则最后一个参数将会生效。如果指定了 -p 以外的参数,Bazel 将回退到使用补丁命令行工具,而不是 Bazel 原生补丁实现。如果回退到补丁命令行工具且未指定 patch_tool 属性,系统将使用“patch”。这只会影响 `patches` 属性中的补丁文件。  | 
patch_cmds | 
字符串列表;可选
 应用补丁后,要应用于 Linux/Macos 的一系列 Bash 命令。  | 
patch_cmds_win | 
字符串列表;可选
 应用补丁后,要应用于 Windows 的 Powershell 命令序列。如果未设置此属性,系统会在 Windows 上执行 patch_cmds,这要求存在 Bash 二进制文件。  | 
patch_tool | 
String;可选
 要使用的补丁(1) 实用程序。如果指定此字段,Bazel 将使用指定的修补工具,而不是 Bazel 原生补丁程序实现。  | 
patches | 
标签列表;可选
 在提取归档文件后要作为补丁应用的文件列表。默认情况下,它使用不支持模糊匹配和二进制补丁的 Bazel 原生补丁实现,但如果指定了“patch_tool”属性或“patch_args”属性中存在除“-p”以外的参数,Bazel 将回退到使用补丁命令行工具。  | 
remote_file_integrity | 
字典:String ->String;可选
 文件相对路径(键)到其完整性值(值)的映射。这些相对路径应映射到 `remote_file_urls` 属性中的文件(键)。  | 
remote_file_urls | 
字典:String ->字符串列表;可选
 相对路径(键)到网址(值)列表的映射,这些网址(值)将被下载并在代码库中作为叠加文件提供。如果您想在现有代码库上添加 WORKSPACE 或 BUILD.bazel 文件,这会非常有用。先下载这些文件,然后再应用 `patches` 属性中的补丁,并且网址列表应是同一文件的可能镜像。系统会按顺序尝试这些网址,直到成功为止。  | 
remote_patch_strip | 
整数;可选
 要从远程补丁的文件名中删除的前导斜杠的数量。  | 
remote_patches | 
字典:String ->String;可选
 补丁文件网址到其完整性值的映射,在提取归档文件之后、通过 `patches` 属性应用补丁文件之前,系统会应用补丁文件网址。它使用 Bazel 原生补丁实现,您可以使用“remote_patch_strip”指定补丁条编号  | 
repo_mapping | 
字典:String ->String;必需
 从本地代码库名称到全局代码库名称的字典。这样,您就可以控制此代码库的依赖项的工作区依赖项解析。 例如,条目 "@foo": "@bar"` 声明,无论何时此仓库依赖于 `@foo`(例如 `@foo//some:target` 的依赖项),它实际上都应在全局声明的 `@bar` (`@bar//some:target`) 中解析该依赖项。  | 
sha256 | 
String;可选
 所下载文件的预期 SHA-256。 此签名必须与所下载文件的 SHA-256 一致。_这是安全风险 因为远程文件可能会更改,所以最好省略 SHA-256 字段会使您的 build 变得非封闭。如果需要进行开发 但在发货前应设置此属性或 `integrity`。  | 
strip_prefix | 
String;可选
 要从提取的文件中删除的目录前缀。 许多存档都包含顶级目录,其中包含所有有用的 存档中的文件。无需反复指定此前缀 这个字段可用于将其从 文件。 例如,假设您使用的是“foo-lib-latest.zip”,其中包含 目录“foo-lib-1.2.3/”,该目录中包含“WORKSPACE”文件, `src/`、`lib/` 和 `test/` 目录,其中包含你创建的实际代码 构建应用。指定 `strip_prefix = "foo-lib-1.2.3"` 以使用 “foo-lib-1.2.3”目录作为顶级目录。 请注意,如果此目录外存在文件, 已被舍弃且无法访问(例如,顶级许可文件)。这包括 以该前缀开头但不在目录中的文件/目录 (例如,`foo-lib-1.2.3.release-notes`).如果指定的前缀不是 与归档中的目录匹配,则 Bazel 将返回错误。  | 
type | 
String;可选
 已下载文件的归档类型。 默认情况下,存档类型是由 网址。如果文件没有扩展名,您可以明确指定 后续:"zip"`, "jar"`, "war"`, "aar"`, "tar"`, "tar.gz"`, "tgz"`、 “tar.xz”“txz”“tar.zst”“tzst”“tar.bz2”“ar 或 deb”。  | 
url | 
String;可选
 指向可供 Bazel 使用的文件的网址。 此网址必须是文件、http 或 https 网址。遵循重定向。 不支持身份验证。 使用 urls 参数可以实现更大的灵活性, 用于指定要从中提取的备用网址。  | 
urls | 
字符串列表;可选
 指向可供 Bazel 使用的文件的网址列表。 每个条目都必须是文件、http 或 https 网址。遵循重定向。 不支持身份验证。 系统会按顺序尝试网址,直到成功成功为止。因此,您应先列出本地镜像。 如果所有下载均失败,则规则将会失败。  | 
workspace_file | 
标签;可选
 要用作此代码库的“WORKSPACE”文件的文件。可以指定“workspace_file”或“workspace_file_content”,也可以不指定任何一个,但不能同时指定两者。  | 
workspace_file_content | 
String;可选
 此代码库的 WORKSPACE 文件的内容。可以指定“workspace_file”或“workspace_file_content”,也可以不指定任何一个,但不能同时指定两者。  | 
http_file
http_file(name, auth_patterns, canonical_id, downloaded_file_path, executable, integrity, netrc, repo_mapping, sha256, url, urls)
从某个网址下载文件,并使其可用作文件 。
示例: 假设您的自定义规则需要 debian 软件包。此包裹 可通过 http://example.com/package.deb 下载。然后,您可以将 WORKSPACE 文件:
  load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
  http_file(
      name = "my_deb",
      url = "http://example.com/package.deb",
      sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  )
目标会将 @my_deb//file 指定为依赖于此文件的依赖项。
属性
name | 
姓名;必需
 此代码库的唯一名称。  | 
auth_patterns | 
字典:String ->String;可选
 
将主机名映射到自定义授权格式的可选字典。
如果某个网址的主机名出现在此字典中,则该值将用作
为 http 请求生成授权标头。这样,您就可以使用
。
该模式目前支持 2 种令牌: 
auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
machine storage.cloudprovider.com
        password RANDOM-TOKEN
Authorization: Bearer RANDOM-TOKEN  | 
canonical_id | 
String;可选
 已下载文件的规范 ID。 如果已指定且非空,则 Bazel 不会从缓存中获取文件,除非该文件 由具有相同规范 ID 的请求添加到缓存。 如果未指定或为空,则默认情况下,Bazel 会将文件的网址用作 规范 ID。这有助于发现在更新网址时 同时会更新哈希值,导致构建在本地成功完成但 在没有缓存文件的计算机上可通过 --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0.  | 
downloaded_file_path | 
String;可选
 分配给所下载文件的路径  | 
executable | 
布尔值;可选
 下载的文件是否应设为可执行文件。  | 
integrity | 
String;可选
 所下载文件的应采用子资源完整性格式的校验和。 必须与所下载文件的校验和一致。_这是安全风险 因为远程文件可能会更改,所以最好省略此 字段会使您的 build 变得非封闭。如果需要进行开发 但在发货前应设置此属性或 `sha256`。  | 
netrc | 
String;可选
 用于身份验证的 .netrc 文件的位置  | 
repo_mapping | 
字典:String ->String;必需
 从本地代码库名称到全局代码库名称的字典。这样,您就可以控制此代码库的依赖项的工作区依赖项解析。 例如,条目 "@foo": "@bar"` 声明,无论何时此仓库依赖于 `@foo`(例如 `@foo//some:target` 的依赖项),它实际上都应在全局声明的 `@bar` (`@bar//some:target`) 中解析该依赖项。  | 
sha256 | 
String;可选
 所下载文件的预期 SHA-256。 此签名必须与所下载文件的 SHA-256 一致。_这是安全风险 因为远程文件可能会更改,所以最好省略 SHA-256 字段会使您的 build 变得非封闭。如果需要进行开发 但应在发货前设置。  | 
url | 
String;可选
 指向可供 Bazel 使用的文件的网址。 此网址必须是文件、http 或 https 网址。遵循重定向。 不支持身份验证。 使用 urls 参数可以实现更大的灵活性, 用于指定要从中提取的备用网址。  | 
urls | 
字符串列表;可选
 指向可供 Bazel 使用的文件的网址列表。 每个条目都必须是文件、http 或 https 网址。遵循重定向。 不支持身份验证。 系统会按顺序尝试网址,直到成功成功为止。因此,您应先列出本地镜像。 如果所有下载均失败,则规则将会失败。  | 
http_jar
http_jar(name, auth_patterns, canonical_id, downloaded_file_name, integrity, netrc, repo_mapping, sha256, url, urls)
从网址下载 jar 并将其作为 java_import 提供
下载的文件必须具有 .jar 扩展名。
示例:
  假设当前代码库包含某个聊天程序的源代码,该程序的根目录位于
  目录 ~/chat-app。它需要依赖于可从
  http://example.com/openssl-0.2.jar。
如果以下代码行:~/chat-app 代码库中的目标可以依赖于此目标
  添加到“~/chat-app/WORKSPACE”:
  load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_jar")
  http_jar(
      name = "my_ssl",
      url = "http://example.com/openssl-0.2.jar",
      sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  )
目标会将 @my_ssl//jar 指定为依赖于此 jar 的依赖项。
您还可以使用“file:///path/to/file”引用当前系统(本地主机)上的文件
  使用基于 Unix 的系统。如果您使用的是 Windows,则请使用“file:///c:/path/to/file”。在
  例如,请注意三个斜杠 (/),其中前两条斜杠属于 file://,第三个斜杠
  一个属于文件的绝对路径。
属性
name | 
姓名;必需
 此代码库的唯一名称。  | 
auth_patterns | 
字典:String ->String;可选
 
将主机名映射到自定义授权格式的可选字典。
如果某个网址的主机名出现在此字典中,则该值将用作
为 http 请求生成授权标头。这样,您就可以使用
。
该模式目前支持 2 种令牌: 
auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
machine storage.cloudprovider.com
        password RANDOM-TOKEN
Authorization: Bearer RANDOM-TOKEN  | 
canonical_id | 
String;可选
 已下载文件的规范 ID。 如果已指定且非空,则 Bazel 不会从缓存中获取文件,除非该文件 由具有相同规范 ID 的请求添加到缓存。 如果未指定或为空,则默认情况下,Bazel 会将文件的网址用作 规范 ID。这有助于发现在更新网址时 同时会更新哈希值,导致构建在本地成功完成但 在没有缓存文件的计算机上可通过 --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0.  | 
downloaded_file_name | 
String;可选
 分配给所下载 jar 的文件名  | 
integrity | 
String;可选
 所下载文件的应采用子资源完整性格式的校验和。 必须与所下载文件的校验和一致。_这是安全风险 因为远程文件可能会更改,所以最好省略此 字段会使您的 build 变得非封闭。如果需要进行开发 但在发货前应设置此属性或 `sha256`。  | 
netrc | 
String;可选
 用于身份验证的 .netrc 文件的位置  | 
repo_mapping | 
字典:String ->String;必需
 从本地代码库名称到全局代码库名称的字典。这样,您就可以控制此代码库的依赖项的工作区依赖项解析。 例如,条目 "@foo": "@bar"` 声明,无论何时此仓库依赖于 `@foo`(例如 `@foo//some:target` 的依赖项),它实际上都应在全局声明的 `@bar` (`@bar//some:target`) 中解析该依赖项。  | 
sha256 | 
String;可选
 所下载文件的预期 SHA-256。 此签名必须与所下载文件的 SHA-256 一致。_这是安全风险 因为远程文件可能会更改,所以最好省略 SHA-256 字段会使您的 build 变得非封闭。如果需要进行开发 但在发货前应设置此属性或 `integrity`。  | 
url | 
String;可选
 指向可供 Bazel 使用的文件的网址。 此网址必须是文件、http 或 https 网址。遵循重定向。 不支持身份验证。 使用 urls 参数可以实现更大的灵活性, 用于指定要从中提取的备用网址。 网址必须以“.jar”结尾。  | 
urls | 
字符串列表;可选
 指向可供 Bazel 使用的文件的网址列表。 每个条目都必须是文件、http 或 https 网址。遵循重定向。 不支持身份验证。 系统会按顺序尝试网址,直到成功成功为止。因此,您应先列出本地镜像。 如果所有下载均失败,则规则将会失败。 所有网址都必须以“.jar”结尾。  |