Bazel 6.3.0 中導入的 mod
指令提供了一系列工具,
啟用 Bzlmod 時,使用者會瞭解外部依附元件圖表。這項服務
可讓您以視覺化方式呈現依附元件圖表,瞭解特定模組或
模組中會顯示模組版本,請查看支援資料庫的存放區定義。
以及檢查模組擴充功能和其產生的存放區的使用情形
其他函式。
語法
bazel mod <subcommand> [<options>] [<arg> [<arg>...]]
可用的子指令及其各自的必要引數如下:
graph
:顯示專案的完整依附元件圖表,從 根層級模組如果在--from
中指定一或多個模組,則這些模組 模組直接顯示在根層級下,而且圖表只會展開 從頭開始 (請參閱範例)。deps <arg>...
:顯示各個 Pod 的解析直接依附元件 與graph
類似all_paths <arg>...
:顯示從根目錄到 指定的是<arg>...
。如果在--from
中指定一或多個模組, 這些模組會直接顯示在根層級下,而圖表中包含任何 從--from
模組到引數模組的任何現有路徑 (請參閱 example)。path <arg>...
:與all_paths
的語意相同,但只顯示一個 從其中一個--from
模組到其中一個引數模組的單一路徑。explain <arg>...
:顯示指定模組的所有位置 以及直接依附於 具體做法是指示 Kubernetes 建立並維護 一或多個代表這些 Pod 的物件explain
指令的輸出內容基本上是經過剪輯的all_paths
指令,其中含有 1) 根模組;2) 根模組的 導向引數模組的直接依附元件;3) 引數 模組直接附屬機構;和 4) 引數模組本身 (請見範例)。show_repo <arg>...
:顯示特定存放區的定義 (請參閱 example)。show_extension <extension>...
:顯示每個 指定的擴充功能:產生的存放區清單以及模組 使用use_repo
匯入這些函式,以及 會套用每個所用模組的 標記和use_repo
呼叫 (請參閱範例)。
<arg>
是指一或多個模組或存放區。可以是下列其中一項:
常值字串
<root>
:代表目前資料的根模組 專案。<name>@<version>
:<name>
版的模組<version>
。模組 並使用底線 (_
) 做為<version>
。<name>
:模組<name>
的所有現存版本。@<repo_name>
:包含指定 apparent 的存放區 將其命名為--base_module
。@@<repo_name>
:含有指定 standard name 中的值。
在需要指定模組的環境中,<arg>
是指會
各個模組 (擴充功能產生的存放區) 也可以
相反地,在要求指定存放區的情況下,<arg>
是指
模組可放置於對應的存放區。
<extension>
的格式必須為 <arg><label_to_bzl_file>%<extension_name>
。
<label_to_bzl_file>
部分必須是存放區相關標籤 (例如
//pkg/path:file.bzl
)。
下列選項只會影響輸出圖表的子指令 (graph
、
deps
、all_paths
、path
和 explain
):
--from <arg>[,<arg>[,...]]
預設:<root>
:來源模組 圖表已在graph
、all_paths
、path
和explain
中展開。確認 子指令的說明。--verbose
default: "false":包含在輸出圖表額外項目中 各模組版本解析的資訊。如果模組 版本變更時,請顯示替代版本,或 原始版本、取代原因以及模組 如果理由是最小版本,則要求新版本 選項。--include_unused
default: "false":在輸出圖表中加入 原本出現在依附關係圖中的模組,但後來變成 未使用的模組。--extension_info <mode>
:包含模組擴充功能的相關資訊 (請參閱範例)。<mode>
可以是下列任一值:hidden
(預設):不顯示任何擴充功能相關資訊。usages
:在每個使用這些模組的模組下方顯示擴充功能。他們 會以$<extension>
的形式列印。repos
:除了usages
以外,顯示使用以下方式匯入的存放區:use_repo
。all
:除了usages
和repos
以外,也顯示 並非由任何模組匯入的擴充功能產生的存放區。這些 額外存放區會顯示在第一次產生的存放區下方 而且已透過虛線邊緣連結
--extension_filter <extension>[,<extension>[,...]]
:如有指定,系統會 輸出圖表只包含使用指定擴充功能的模組,以及 通往這些模組的路徑指定空白的擴充功能清單 (例如 在--extension_filter=
中) 等同於指定「所有」使用的副檔名 套用至依附元件圖中的任何模組。--depth <N>
:輸出圖表的深度。厚度 1 則只會顯示 及其直接依附元件explain
預設為 1,deps
預設為 2 對其他筆下--cycles
default: "false":在輸出圖表中加入循環邊緣。--include_builtin
default: "false":包含內建模組 (例如@bazel_tools
)。這個標記預設為停用狀態,因為 內建模組間接依附於其他所有模組 因此輸出內容會大打折扣。--charset <charset>
default: utf8:指定要用於文字的字元集 輸出內容有效值為"utf8"
和"ascii"
。這裡是 計算差異在於"text"
輸出格式,不適用於"ascii"
字元集。 因此,建議使用"ascii"
字元集,一併支援 無法使用 Unicode 的舊版平台。--output <mode>
:加入模組擴充功能使用情形的相關資訊,做為 一部分<mode
>可以是下列任一值:text
(預設):使用者可理解的輸出圖表表示法 (整併成樹)。json
:以 JSON 物件的形式輸出圖表 (整併為 樹狀結構)。graph
:輸出 Graphviz 點表示法的圖表。
bazel mod graph --output graph | dot -Tsvg > /tmp/graph.svg
您也可以採取以下做法:
--base_module <arg>
預設:<root>
:指定相對於 系統會解譯引數中的這類存放區名稱請注意,此 引數本身可以是@<repo_name>
的格式;一定會 每個物件都會根據根模組進行轉譯--extension_usages <arg>[,<arg>[,...]]
:將show_extension
篩選器設為僅限 顯示來自指定模組的擴充功能使用資訊。
範例
這裡展示了在實際 Bazel 專案中使用 mod
指令的部分可能用途
以下概要說明,可用來檢查專案的
外部依附元件
MODULE.bazel
檔案:
module(
name = "my_project",
version = "1.0",
)
bazel_dep(name = "bazel_skylib", version = "1.1.1", repo_name = "skylib1")
bazel_dep(name = "bazel_skylib", version = "1.2.0", repo_name = "skylib2")
multiple_version_override(module_name = "bazel_skylib", versions = ["1.1.1", "1.2.0"])
bazel_dep(name = "stardoc", version = "0.5.0")
bazel_dep(name = "rules_java", version = "5.0.0")
toolchains = use_extension("@rules_java//java:extensions.bzl", "toolchains")
use_repo(toolchains, my_jdk="remotejdk17_linux")
顯示完整的依附元件圖表 專案。
bazel mod graph
<root> (my_project@1.0) ├───bazel_skylib@1.1.1 │ └───platforms@0.0.4 ├───bazel_skylib@1.2.0 │ └───platforms@0.0.4 ... ├───rules_java@5.0.0 │ ├───platforms@0.0.4 ... │ ├───rules_cc@0.0.1 │ │ ├───bazel_skylib@1.1.1 ... │ │ └───platforms@0.0.4 ... │ └───rules_proto@4.0.0 │ ├───bazel_skylib@1.1.1 ... │ └───rules_cc@0.0.1 ... └───stardoc@0.5.0 ├───bazel_skylib@1.1.1 ... └───rules_java@5.0.0 ...
顯示完整的依附元件圖表 (包括 未使用的模組以及版本解析度的額外資訊)。
bazel mod graph --include_unused --verbose
<root> (my_project@1.0) ├───bazel_skylib@1.1.1 │ └───platforms@0.0.4 ├───bazel_skylib@1.2.0 │ └───platforms@0.0.4 ... ├───rules_java@5.0.0 │ ├───platforms@0.0.4 ... │ ├───rules_cc@0.0.1 │ │ ├───bazel_skylib@1.0.3 ... (to 1.1.1, cause multiple_version_override) │ │ ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) │ │ └───platforms@0.0.4 ... │ └───rules_proto@4.0.0 │ ├───bazel_skylib@1.0.3 ... (to 1.1.1, cause multiple_version_override) │ ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) │ └───rules_cc@0.0.1 ... └───stardoc@0.5.0 ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) ├───rules_java@5.0.0 ... (was 4.0.0, cause <root>, bazel_tools@_) ├───bazel_skylib@1.0.3 (to 1.1.1, cause multiple_version_override) │ └───platforms@0.0.4 ... └───rules_java@4.0.0 (to 5.0.0, cause <root>, bazel_tools@_) ├───bazel_skylib@1.0.3 ... (to 1.1.1, cause multiple_version_override) └───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override)
顯示從以下位置展開的依附元件圖表: 幾個特定模組
bazel mod graph --from rules_java --include_unused
<root> (my_project@1.0) ├───rules_java@5.0.0 │ ├───platforms@0.0.4 │ ├───rules_cc@0.0.1 │ │ ├───bazel_skylib@1.0.3 ... (unused) │ │ ├───bazel_skylib@1.1.1 ... │ │ └───platforms@0.0.4 ... │ └───rules_proto@4.0.0 │ ├───bazel_skylib@1.0.3 ... (unused) │ ├───bazel_skylib@1.1.1 ... │ └───rules_cc@0.0.1 ... └╌╌rules_java@4.0.0 (unused) ├───bazel_skylib@1.0.3 (unused) │ └───platforms@0.0.4 ... └───bazel_skylib@1.1.1 └───platforms@0.0.4 ...
顯示兩個兩個頻道 模組。
bazel mod all_paths bazel_skylib@1.1.1 --from rules_proto
<root> (my_project@1.0) └╌╌rules_proto@4.0.0 ├───bazel_skylib@1.1.1 └───rules_cc@0.0.1 └───bazel_skylib@1.1.1 ...
瞭解專案為何需要仰賴 模組)。
bazel mod explain @skylib1 --verbose --include_unused
<root> (my_project@1.0) ├───bazel_skylib@1.1.1 ├───rules_java@5.0.0 │ ├───rules_cc@0.0.1 │ │ └───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) │ └───rules_proto@4.0.0 │ ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) │ └───rules_cc@0.0.1 ... └───stardoc@0.5.0 ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) ├╌╌rules_cc@0.0.1 │ └───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) └╌╌rules_proto@4.0.0 ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) └───rules_cc@0.0.1 ...
查看部分模組的基本規則 來使用容器映像檔
bazel mod show_repo rules_cc stardoc
## rules_cc@0.0.1: # <builtin> http_archive( name = "rules_cc~0.0.1", urls = ["https://bcr.bazel.build/test-mirror/github.com/bazelbuild/rules_cc/releases/download/0.0.1/rules_cc-0.0.1.tar.gz", "https://github.com/bazelbuild/rules_cc/releases/download/0.0.1/rules_cc-0.0.1.tar.gz"], integrity = "sha256-Tcy/0iwN7xZMj0dFi9UODHFI89kgAs20WcKpamhJgkE=", strip_prefix = "", remote_patches = {"https://bcr.bazel.build/modules/rules_cc/0.0.1/patches/add_module_extension.patch": "sha256-g3+zmGs0YT2HKOVevZpN0Jet89Ylw90Cp9XsIAY8QqU="}, remote_patch_strip = 1, ) # Rule http_archive defined at (most recent call last): # /home/user/.cache/bazel/_bazel_user/6e893e0f5a92cc4cf5909a6e4b2770f9/external/bazel_tools/tools/build_defs/repo/http.bzl:355:31 in <toplevel> ## stardoc: # <builtin> http_archive( name = "stardoc~0.5.0", urls = ["https://bcr.bazel.build/test-mirror/github.com/bazelbuild/stardoc/releases/download/0.5.0/stardoc-0.5.0.tar.gz", "https://github.com/bazelbuild/stardoc/releases/download/0.5.0/stardoc-0.5.0.tar.gz"], integrity = "sha256-yXlNzIAmow/2fPfPkeviRcopSyCwcYRdEsGSr+JDrXI=", strip_prefix = "", remote_patches = {}, remote_patch_strip = 0, ) # Rule http_archive defined at (most recent call last): # /home/user/.cache/bazel/_bazel_user/6e893e0f5a92cc4cf5909a6e4b2770f9/external/bazel_tools/tools/build_defs/repo/http.bzl:355:31 in <toplevel>
查看您在廣告中使用哪些模組擴充功能 依附關係圖
bazel mod graph --extension_info=usages --extension_filter=all
<root> (my_project@1.0) ├───$@@rules_java.5.0.0//java:extensions.bzl%toolchains ├───rules_java@5.0.0 # │ ├───$@@rules_java.5.0.0//java:extensions.bzl%toolchains │ ├───rules_cc@0.0.1 # │ │ └───$@@rules_cc.0.0.1//bzlmod:extensions.bzl%cc_configure │ └───rules_proto@4.0.0 │ └───rules_cc@0.0.1 ... └───stardoc@0.5.0 └───rules_java@5.0.0 ...
查看系統產生的存放區和 從特定擴充功能匯入,做為依附元件圖的一部分。
bazel mod show_extension @@rules_java~5.0.0//java:extensions.bzl%toolchains
<root> (my_project@1.0) ├───$@@rules_java.5.0.0//java:extensions.bzl%toolchains │ ├───remotejdk17_linux │ ├╌╌remotejdk11_linux │ ├╌╌remotejdk11_linux_aarch64 │ ├╌╌remotejdk11_linux_ppc64le │ ├╌╌remotejdk11_linux_s390x ...(some lines omitted)... ├───rules_java@5.0.0 # │ └───$@@rules_java.5.0.0//java:extensions.bzl%toolchains ... │ ├───local_jdk │ ├───remote_java_tools │ ├───remote_java_tools_darwin │ ├───remote_java_tools_linux │ ├───remote_java_tools_windows │ ├───remotejdk11_linux_aarch64_toolchain_config_repo │ ├───remotejdk11_linux_ppc64le_toolchain_config_repo ...(some lines omitted)... └───stardoc@0.5.0 └───rules_java@5.0.0 ...
查看系統產生的 以及該擴充功能在各模組中的用法。
bazel mod graph --extension_info=all --extension_filter=@rules_java//java:extensions.bzl%toolchains
## @@rules_java.5.0.0//java:extensions.bzl%toolchains: Fetched repositories: - local_jdk (imported by bazel_tools@_, rules_java@5.0.0) - remote_java_tools (imported by bazel_tools@_, rules_java@5.0.0) - remote_java_tools_darwin (imported by bazel_tools@_, rules_java@5.0.0) - remote_java_tools_linux (imported by bazel_tools@_, rules_java@5.0.0) - remote_java_tools_windows (imported by bazel_tools@_, rules_java@5.0.0) - remotejdk11_linux_aarch64_toolchain_config_repo (imported by rules_java@5.0.0) - remotejdk11_linux_ppc64le_toolchain_config_repo (imported by rules_java@5.0.0) ...(some lines omitted)... - remotejdk17_linux (imported by <root>) - remotejdk11_linux - remotejdk11_linux_aarch64 - remotejdk11_linux_ppc64le - remotejdk11_linux_s390x - remotejdk11_macos ...(some lines omitted)... # Usage in <root> at <root>/MODULE.bazel:14:27 with the specified attributes: use_repo( toolchains, my_jdk="remotejdk17_linux", ) # Usage in bazel_tools@_ at bazel_tools@_/MODULE.bazel:23:32 with the specified attributes: use_repo( toolchains, "local_jdk", "remote_java_tools", "remote_java_tools_linux", "remote_java_tools_windows", "remote_java_tools_darwin", ) # Usage in rules_java@5.0.0 at rules_java@5.0.0/MODULE.bazel:30:27 with the specified attributes: use_repo( toolchains, "remote_java_tools", "remote_java_tools_linux", "remote_java_tools_windows", "remote_java_tools_darwin", "local_jdk", "remotejdk11_linux_toolchain_config_repo", "remotejdk11_macos_toolchain_config_repo", "remotejdk11_macos_aarch64_toolchain_config_repo", ...(some lines omitted)... )
查看 由擴充功能產生的存放區
bazel mod show_repo --base_module=rules_java @remote_java_tools
## @remote_java_tools: # <builtin> http_archive( name = "rules_java~5.0.0~toolchains~remote_java_tools", urls = ["https://mirror.bazel.build/bazel_java_tools/releases/java/v11.5/java_tools-v11.5.zip", "https://github.com/bazelbuild/java_tools/releases/download/java_v11.5/java_tools-v11.5.zip"], sha256 = "b763ee80e5754e593fd6d5be6d7343f905bc8b73d661d36d842b024ca11b6793", ) # Rule http_archive defined at (most recent call last): # /home/user/.cache/bazel/_bazel_user/6e893e0f5a92cc4cf5909a6e4b2770f9/external/bazel_tools/tools/build_defs/repo/http.bzl:355:31 in <toplevel>