Bazel 6.3.0에 도입된 mod
명령어는
Bzlmod가 사용 설정되었을 때 사용자가 외부 종속 항목 그래프를 이해합니다. 그것은
종속 항목 그래프를 시각화하고 특정 모듈이나 특정
모듈의 버전이 그래프에 있으면 저장소 정의를 확인하고
모듈 확장 프로그램 사용 및 생성된 저장소 사용 검사 등
사용할 수 있습니다
구문
bazel mod <subcommand> [<options>] [<arg> [<arg>...]]
사용 가능한 하위 명령어와 각각의 필수 인수는 다음과 같습니다.
graph
: 다음에서 시작하여 프로젝트의 전체 종속 항목 그래프를 표시합니다. kube-APIserver입니다 하나 이상의 모듈이--from
에 지정되어 있는 경우 모듈은 루트 바로 아래에 표시되며 그래프는 시작합니다 (예 참조).deps <arg>...
: 각 함수의 확인된 직접 종속 항목을 표시합니다.graph
와 유사하게 지정된 모듈을 사용합니다.all_paths <arg>...
: 루트에서<arg>...
로 지정되었습니다. 하나 이상의 모듈이--from
에 지정된 경우 이러한 모듈은 루트 아래에 직접 표시되며 그래프에는--from
모듈에서 인수 모듈까지의 모든 기존 경로( 예).path <arg>...
:all_paths
와 시맨틱스가 동일하지만--from
모듈 중 하나에서 인수 모듈 중 하나로의 단일 경로입니다.explain <arg>...
: 지정된 모듈이 나타나는 모든 위치를 표시합니다. 종속 항목 그래프에 직접 종속된 모듈과 함께 있습니다.explain
명령어의 출력은 기본적으로all_paths
명령어(1) 루트 모듈 포함 2) 루트 모듈의 인수 모듈로 이어지는 직접 종속 항목 3) 인수 모듈의 직접 부양가족 및 4) 인수 모듈 자체 (예 참고)show_repo <arg>...
: 지정된 저장소의 정의를 표시합니다. 예).show_extension <extension>...
: 각 지정된 확장 프로그램: 모듈과 함께 생성된 저장소 목록use_repo
를 사용하여 가져오는 함수와 그 사용법의 목록을 볼 수 있습니다. 사용되는 각 모듈의 확장자를 사용하며, 지정된 태그 및use_repo
호출 (예 참고)
<arg>
는 하나 이상의 모듈 또는 저장소를 나타냅니다. 다음 중 하나일 수 있습니다.
리터럴 문자열
<root>
: 현재 애플리케이션을 나타내는 루트 모듈입니다. 살펴보겠습니다<name>@<version>
:<version>
버전의<name>
모듈입니다. 모듈의 경우 비 레지스트리 재정의가 있는 경우 밑줄 (_
)을<version>
로 사용합니다.<name>
: 모두<name>
모듈의 모든 버전입니다.@<repo_name>
: 주어진 이름을--base_module
맥락에서 표현합니다.@@<repo_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": 출력 그래프 extra에 포함 각 모듈의 버전 확인 정보가 포함됩니다. 모듈이 해결 중에 변경된 버전이 있는 경우 이를 대체한 버전을 표시하거나 원래 버전, 교체 이유 및 모듈 이유가 최소 버전인 경우 새 버전을 요청함 선택.--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"
입니다. 유일하게 중요한 문자를 그리는 데 사용되는 특수 문자와"ascii"
문자 집합에 없는"text"
출력 형식 따라서"ascii"
문자 집합은 유니코드를 사용할 수 없는 레거시 플랫폼.--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")
<ph type="x-smartling-placeholder"> |
<ph type="x-smartling-placeholder"> |
개발자의 전체 종속 항목 그래프 표시 살펴보겠습니다
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>