您可從下列函式載入下列函式:
@bazel_tools//tools/build_defs/repo:http.bzl
。
透過 HTTP 下載檔案和封存檔的規則。
設定
如要使用這些規則,請在 WORKSPACE
檔案中載入這些規則,如下所示:
load(
"@bazel_tools//tools/build_defs/repo:http.bzl",
"http_archive",
"http_file",
"http_jar",
)
這些規則是原生 http 規則的改良版本,最終也會 並取代原生規則
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/WORKSPACE
,~/chat-app
存放區中的目標就能依賴這個目標:
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"` 和 `strip_prefix = "foo-1.2.3"`,檔案 `foo-1.2.3/src/foo.h` 就會解壓縮為 `bar/src/foo.h`。 |
auth_patterns |
字典:字串 -> 字串 (選用)
選用的字典,對應主機名稱和自訂授權模式。
如果網址的主機名稱出現在這個引數中,則系統會在
產生 http 要求的授權標頭。這可讓您使用許多常見雲端儲存空間供應商使用的自訂授權方案。模式目前支援 2 個符記: 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;選用
下載檔案的子資源完整性格式預期總和檢查碼。 此值必須與下載的檔案檢查和總和相符。_存在安全性風險 因為遠端檔案可以變更,所以省略總和檢查碼。_ ] 欄位會使版本變得非密封。您可以選擇是否要使用此屬性來簡化開發作業,但應在發布前設定此屬性或 `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; 選用 要使用的 patch(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 |
Integer;選用
要移除遠端修補程式中檔案名稱的前置斜線數量。 |
remote_patches |
字典:字串 -> 字串 (選用)
將修補檔案網址對應至完整性值,這些值會在解壓縮封存檔案後,以及套用 `patches` 屬性中的修補檔案前套用。它使用 Bazel 原生修補程式實作,您可以使用 `remote_patch_strip` 指定修補程式區塊數 |
repo_mapping |
字典:字串 -> 字串;必要 從本機存放區名稱到全域存放區名稱的字典。如此一來,即可控管這個存放區的依附元件的工作區依附元件解決方案。 舉例來說,如果有個項目 `"@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 參數指定要擷取的其他網址,以便獲得更大的彈性。 |
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 |
字典:字串 -> 字串 (選用)
選用字典,可將主機名稱對應至自訂授權模式。如果網址的主機名稱出現在這個引數中,則系統會在
產生 http 要求的授權標頭。這可讓您使用許多常見雲端儲存空間供應商使用的自訂授權方案。模式目前支援 2 個符記: 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; 選用 下載檔案的子資源完整性格式預期總和檢查碼。 此值必須與下載的檔案檢查和總和相符。_存在安全性風險 因為遠端檔案可以變更,所以省略總和檢查碼。_ ] 欄位會使版本變得非密封。您可以選擇是否要使用此屬性來簡化開發作業,但應在發布前設定此屬性或 `sha256`。 |
netrc |
String;選用
用於驗證的 .netrc 檔案位置 |
repo_mapping |
字典:字串 -> 字串;必要 從本機存放區名稱到全域存放區名稱的字典。如此一來,即可控管這個存放區的依附元件的工作區依附元件解決方案。 舉例來說,如果有個項目 `"@foo":"@bar"`,表示此存放區每次依賴 `@foo` 時 (例如依賴 `@foo//some:target`),實際上應在全域宣告的 `@bar` (`@bar//some:target`) 中解析該依附元件。 |
sha256 |
String; 選用 下載檔案的預期 SHA-256。這個引數必須與下載檔案的 SHA-256 相符。_存在安全性風險 以便省略 SHA-256,因為遠端檔案可以變更。_ 最好省略此 ] 欄位會使版本變得非密封。可以選擇是否要進行開發 但應在運送前設定 |
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
取得的 SSL 程式庫。
如果將下列程式碼行新增至 ~/chat-app/WORKSPACE
,~/chat-app
存放區中的目標就能依賴這個目標:
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 |
字典:字串 -> 字串 (選用)
選用的字典,對應主機名稱和自訂授權模式。
如果這個字典中包含網址的主機名稱,系統在產生 HTTP 要求的授權標頭時,就會使用該值做為模式。這樣您就能使用
用於許多常見雲端儲存空間供應商的授權配置。
模式目前支援 2 個符記: 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; 選用 下載檔案的子資源完整性格式預期總和檢查碼。 此值必須與下載的檔案檢查和總和相符。_存在安全性風險 因為遠端檔案可以變更,所以省略總和檢查碼。_ ] 欄位會使版本變得非密封。您可以選擇是否要使用此屬性來簡化開發作業,但應在發布前設定此屬性或 `sha256`。 |
netrc |
String;選用
用於驗證的 .netrc 檔案位置 |
repo_mapping |
字典:字串 -> 字串;必要 從本機存放區名稱到全域存放區名稱的字典。如此一來,即可控管這個存放區的依附元件的工作區依附元件解決方案。 舉例來說,如果有個項目 `"@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` 結尾。 |