HTTP 存放區規則

您可從下列函式載入下列函式: @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;選用

選用的字典,將主機名稱對應至自訂授權模式。 如果網址的主機名稱出現在這個引數中,則系統會在 產生 http 要求的授權標頭。這樣您就能使用 用於許多常見雲端儲存空間供應商的授權配置。 這個模式目前支援 2 個符記:<login><password>,會替換為同等值 。格式化後的結果 做為 HTTP 要求的「Authorization」欄位的值。 使用不記名權杖以 http 下載至已啟用 OAuth2 的 API 的屬性和網路 rc 範例:

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
最終的 HTTP 要求具有下列標頭:
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;選用

下載檔案的子資源完整性格式預期總和檢查碼。 這個 ID 必須與下載檔案的總和檢查碼相符。_存在安全性風險 因為遠端檔案可以變更,所以省略總和檢查碼。_ ] 欄位會使版本變得非密封。可以選擇是否要進行開發 但此屬性或「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 指令序列。如未設定此屬性,patch_cmds 會在 Windows 上執行,而需要 Bash 二進位檔。

patch_tool String;選用

要使用的修補程式(1) 公用程式。如有指定,Bazel 會使用指定的修補程式工具,而非 Bazel 原生的修補程式實作。

patches 標籤清單;選用

擷取封存檔案後,要套用為修補程式的檔案清單。根據預設,它會使用不支援模糊比對和二進位修補程式的 Bazel 原生修補程式實作項目,但如果已指定「patch_tool」屬性,或是在「patch_args」屬性中含有「-p」以外的引數,Bazel 就會改用修補程式指令列工具。

remote_file_integrity 字典:字串 ->String;選用

檔案相對路徑 (鍵) 與其完整性值 (值) 的對應。這些相對路徑應對應到 `remote_file_urls` 屬性中的檔案 (鍵)。

remote_file_urls 字典:字串 ->字串清單;選用

相對路徑 (鍵) 對應至要下載並在存放區中以重疊檔案形式提供的網址 (值) 清單。當您想在現有存放區上新增 WORKSPACE 或 BUILD.bazel 檔案時,這項功能就非常實用。系統會先下載檔案,再將修補程式套用至 `patches` 屬性,因此網址清單應為同一個檔案的所有可能鏡像。系統會依序嘗試網址,直到網址成功為止。

remote_patch_strip 整數;選用

要移除遠端修補程式中檔案名稱的前置斜線數量。

remote_patches 字典:字串 ->String;選用

修補檔案網址與其完整性值的對應,會在擷取封存檔後套用,然後再從 `patches` 屬性套用修補檔案之前套用。此工具使用 Bazel 原生修補程式實作項目,您可以使用「remote_patch_strip」來指定修補程式去除編號

repo_mapping 字典:字串 ->String;必選

從本機存放區名稱到全域存放區名稱的字典。如此一來,即可控管這個存放區的依附元件的工作區依附元件解決方案。

舉例來說,項目 `"@foo": "@bar"` 會在任何時候這個存放區依附於 `@foo` (例如 `@foo//some:target` 上的依附元件),實際上應在全域宣告的 `@bar` (`@bar//some:target`) 中解析該依附元件。

sha256 String;選用

下載檔案的預期 SHA-256。 這個引數必須與下載檔案的 SHA-256 相符。_存在安全性風險 以便省略 SHA-256,因為遠端檔案可以變更。_ 最好省略此 ] 欄位會使版本變得非密封。可以選擇是否要進行開發 但這項屬性或「integrity」必須在運送前設定。

strip_prefix String;選用

要從已擷取檔案中移除的目錄前置字串。 許多封存檔都包含頂層目錄,其中包含所有實用的 封存檔。不需要反覆指定這個前置字串 在 `build_file` 中,這個欄位可用來從所有 擷取的檔案。 舉例來說,假設您使用的 `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 字串清單;選用

可讓 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;選用

選用的字典,將主機名稱對應至自訂授權模式。 如果網址的主機名稱出現在這個引數中,則系統會在 產生 http 要求的授權標頭。這樣您就能使用 用於許多常見雲端儲存空間供應商的授權配置。 這個模式目前支援 2 個符記:<login><password>,會替換為同等值 。格式化後的結果 做為 HTTP 要求的「Authorization」欄位的值。 使用不記名權杖以 http 下載至已啟用 OAuth2 的 API 的屬性和網路 rc 範例:

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
最終的 HTTP 要求具有下列標頭:
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;選用

下載檔案的子資源完整性格式預期總和檢查碼。 這個 ID 必須與下載檔案的總和檢查碼相符。_存在安全性風險 因為遠端檔案可以變更,所以省略總和檢查碼。_ ] 欄位會使版本變得非密封。可以選擇是否要進行開發 但此屬性或「sha256」應在運送前設定

netrc String;選用

用於驗證的 .netrc 檔案位置

repo_mapping 字典:字串 ->String;必選

從本機存放區名稱到全域存放區名稱的字典。如此一來,即可控管這個存放區的依附元件的工作區依附元件解決方案。

舉例來說,項目 `"@foo": "@bar"` 會在任何時候這個存放區依附於 `@foo` (例如 `@foo//some:target` 上的依附元件),實際上應在全域宣告的 `@bar` (`@bar//some:target`) 中解析該依附元件。

sha256 String;選用

下載檔案的預期 SHA-256。 這個引數必須與下載檔案的 SHA-256 相符。_存在安全性風險 以便省略 SHA-256,因為遠端檔案可以變更。_ 最好省略此 ] 欄位會使版本變得非密封。可以選擇是否要進行開發 但應在運送前設定

url String;選用

可讓 Bazel 存取的檔案網址。 格式必須為檔案、http 或 https 網址。我們會繼續追蹤路線。 系統不支援驗證。 方法是使用 指定要從哪個替代網址擷取。

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」參照目前系統 (localhost) 上的檔案 如果您是在 Unix 系統上進行連線如果是 Windows 電腦,請使用「file:///c:/path/to/file」。兩者皆有 請注意這三個斜線 (/),前兩個斜線屬於 file://,第三個 位於檔案的絕對路徑

屬性

name 名稱;必選

這個存放區的專屬名稱。

auth_patterns 字典:字串 ->String;選用

選用的字典,將主機名稱對應至自訂授權模式。 如果網址的主機名稱出現在這個引數中,則系統會在 產生 http 要求的授權標頭。這樣您就能使用 用於許多常見雲端儲存空間供應商的授權配置。 這個模式目前支援 2 個符記:<login><password>,會替換為同等值 。格式化後的結果 做為 HTTP 要求的「Authorization」欄位的值。 使用不記名權杖以 http 下載至已啟用 OAuth2 的 API 的屬性和網路 rc 範例:

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
最終的 HTTP 要求具有下列標頭:
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;選用

下載檔案的子資源完整性格式預期總和檢查碼。 這個 ID 必須與下載檔案的總和檢查碼相符。_存在安全性風險 因為遠端檔案可以變更,所以省略總和檢查碼。_ ] 欄位會使版本變得非密封。可以選擇是否要進行開發 但此屬性或「sha256」應在運送前設定

netrc String;選用

用於驗證的 .netrc 檔案位置

repo_mapping 字典:字串 ->String;必選

從本機存放區名稱到全域存放區名稱的字典。如此一來,即可控管這個存放區的依附元件的工作區依附元件解決方案。

舉例來說,項目 `"@foo": "@bar"` 會在任何時候這個存放區依附於 `@foo` (例如 `@foo//some:target` 上的依附元件),實際上應在全域宣告的 `@bar` (`@bar//some:target`) 中解析該依附元件。

sha256 String;選用

下載檔案的預期 SHA-256。 這個引數必須與下載檔案的 SHA-256 相符。_存在安全性風險 以便省略 SHA-256,因為遠端檔案可以變更。_ 最好省略此 ] 欄位會使版本變得非密封。可以選擇是否要進行開發 但這項屬性或「integrity」必須在運送前設定。

url String;選用

可讓 Bazel 存取的檔案網址。 格式必須為檔案、http 或 https 網址。我們會繼續追蹤路線。 系統不支援驗證。 方法是使用 指定要從哪個替代網址擷取。 網址的結尾必須是 `.jar`。

urls 字串清單;選用

可讓 Bazel 存取的檔案網址清單。 每個項目都必須是檔案、http 或 https 網址。我們會繼續追蹤路線。 系統不支援驗證。 系統會依序嘗試網址,直到成功網址為止,因此您應先列出本機的鏡像。 如果所有下載作業都失敗,規則就會失敗。 所有網址都必須以 `.jar` 結尾。