WORKSPACE 中的影子依附元件
請盡可能在專案中設定單一版本政策, 需要進行編譯,且最終可在最終階段 二進位檔案。在其他情況下,您可以遮蔽依附元件:
我的專案/工作區
workspace(name = "myproject")
local_repository(
name = "A",
path = "../A",
)
local_repository(
name = "B",
path = "../B",
)
空調
workspace(name = "A")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "testrunner",
urls = ["https://github.com/testrunner/v1.zip"],
sha256 = "...",
)
B/工作區
workspace(name = "B")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "testrunner",
urls = ["https://github.com/testrunner/v2.zip"],
sha256 = "..."
)
A
和 B
都依附於 testrunner
的不同版本。
在「myproject
」中納入這兩個類別,而不發生衝突,也就是為兩個值指定不重複的名稱
myproject/WORKSPACE
:
workspace(name = "myproject")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "testrunner-v1",
urls = ["https://github.com/testrunner/v1.zip"],
sha256 = "..."
)
http_archive(
name = "testrunner-v2",
urls = ["https://github.com/testrunner/v2.zip"],
sha256 = "..."
)
local_repository(
name = "A",
path = "../A",
repo_mapping = {"@testrunner" : "@testrunner-v1"}
)
local_repository(
name = "B",
path = "../B",
repo_mapping = {"@testrunner" : "@testrunner-v2"}
)
你也可以使用這個機制加入鑽石。例如,如果 A
和 B
依附元件相同,但以不同名稱呼叫,然後彙整這些依附元件
位置:myproject/WORKSPACE
。
透過指令列覆寫存放區
如要透過指令列使用本機存放區覆寫宣告的存放區,
請使用
--override_repository
敬上
旗標。使用此旗標時,系統會變更外部存放區的內容
並變更原始碼
舉例來說,如要將 @foo
覆寫為本機目錄 /path/to/local/foo
,
傳遞 --override_repository=foo=/path/to/local/foo
標記。
用途包括:
- 偵錯。例如,如要將
http_archive
存放區覆寫為 讓您輕鬆變更設定。 - 供應商。如果您所在的環境無法進行網路呼叫, 覆寫以網路為基礎的存放區規則,指向本機目錄 。
使用 Proxy
Bazel 會從 HTTPS_PROXY
和 HTTP_PROXY
挑選 Proxy 位址
環境變數,並使用這些環境變數來下載 HTTP
和 HTTPS
檔案 (如果
)。
支援 IPv6
在僅限 IPv6 的機器上,Bazel 可以下載依附元件,無須進行任何變更。不過
在雙重堆疊 IPv4/IPv6 機器上 Bazel 都會遵循與 Java 相同的慣例
系統會優先使用 IPv4在某些情況下,例如當 IPv4 時
網路無法解析/連線至外部位址,這可能會導致 Network
unreachable
例外狀況並建構失敗。在這些情況下,您可以覆寫
Bazel 的行為會優先使用
java.net.preferIPv6Addresses=true
系統
屬性。
詳細說明:
使用
--host_jvm_args=-Djava.net.preferIPv6Addresses=true
啟動 選項,例如將.bazelrc
的下一行:startup --host_jvm_args=-Djava.net.preferIPv6Addresses=true
執行需要連線到網際網路的 Java 建構目標 (例如 進行整合測試時,請使用
--jvmopt=-Djava.net.preferIPv6Addresses=true
工具 旗標。舉例來說,您可以在.bazelrc
檔案:build --jvmopt=-Djava.net.preferIPv6Addresses
如果您使用
rules_jvm_external
依附元件版本解析,也會新增 從-Djava.net.preferIPv6Addresses=true
到COURSIER_OPTS
環境 變數,提供 JVM 選項 Coursier。
離線版本
有時候,您可能會想離線執行建構,例如,當您在某個
飛機。針對這種簡單的用途,請使用以下指令預先擷取所需的存放區
bazel fetch
或 bazel sync
。如何在以下期間停止擷取其他存放區
建構,請使用 --nofetch
選項。
至於真正的離線版本,不同實體提供所有需要的檔案,
Bazel 支援 --distdir
選項。這個標記會指示 Bazel 優先要查詢
當存放區規則要求 Bazel 要求 Bazel 時,由該選項指定的目錄
使用 ctx.download
或
ctx.download_and_extract
。變更者:
Bazel 會查詢所需檔案的雜湊總和
第一個網址的基準名稱,並在雜湊相符時使用本機副本。
Bazel 本身會使用這項技術,從發行
Artifact。
方法在於收集所有需要的外部
依附元件
在內部
distdir_tar
。
Bazel 允許在存放區規則中執行任意指令,而無需不知情 當他們呼叫網路,因此無法強制執行完全離線版本。目的地: 測試某個建構作業是否能離線正常運作,手動封鎖網路 ( Bazel 在啟動程序中執行 測試)。