mod
명령어는 사용자가 외부 종속 항목 그래프를 이해하는 데 도움이 되는 다양한 도구를 제공합니다. 이를 통해 종속 항목 그래프를 시각화하고, 특정 모듈이나 모듈 버전이 그래프에 있는 이유를 알아내고, 모듈을 지원하는 저장소 정의를 확인하고, 모듈 확장 프로그램의 사용과 생성된 저장소를 검사하는 등의 기능을 사용할 수 있습니다.
구문
bazel mod <subcommand> [<options>] [<arg> [<arg>...]]
사용 가능한 하위 명령어와 각각의 필수 인수는 다음과 같습니다.
graph
: 루트 모듈부터 시작하여 프로젝트의 전체 종속 항목 그래프를 표시합니다. 하나 이상의 모듈이--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>[,...]]
default:<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=
에서와 같이)은 종속 항목 그래프의 모듈에서 사용하는 all 확장 프로그램을 지정하는 것과 같습니다.--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"
문자 집합이 있습니다.--output <mode>
: 모듈 확장 프로그램 사용에 관한 정보를 출력 그래프의 일부로 포함합니다.<mode
>은 다음 중 하나일 수 있습니다.text
(기본값): 출력 그래프의 사람이 읽을 수 있는 표현입니다(트리로 평탄화됨).json
: 그래프를 JSON 객체 (트리로 평탄화됨) 형식으로 출력합니다.graph
: 그래프를 Graphviz dot 표현으로 출력합니다.
bazel mod graph --output graph | dot -Tsvg > /tmp/graph.svg
그 밖에도 다음과 같은 옵션이 있습니다.
--base_module <arg>
default:<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+", 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+", 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++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>