mod 명령어는 사용자가 외부 종속 항목 그래프를 이해하는 데 도움이 되는 다양한 도구를 제공합니다. 종속 항목 그래프를 시각화하고, 특정 모듈 또는 모듈 버전이 그래프에 있는 이유를 파악하고, 모듈을 지원하는 저장소 정의를 보고, 모듈 확장 프로그램의 사용과 확장 프로그램이 생성하는 저장소를 검사하는 등의 기능을 제공합니다.
구문
bazel mod <subcommand> [<options>] [<arg> [<arg>...]]
사용 가능한 하위 명령어와 각각의 필수 인수는 다음과 같습니다.
graph: 루트 모듈부터 시작하여 프로젝트의 전체 종속 항목 그래프를 표시합니다. `--from`에 하나 이상의 모듈이 지정된 경우 이러한 모듈은 루트 바로 아래에 표시되며 그래프는 이러한 모듈부터 확장됩니다 (예 참고).deps <arg>...:graph와 마찬가지로 지정된 각 모듈의 확인된 직접 종속 항목을 표시합니다.all_paths <arg>...: --from 모듈에서 타겟 모듈 까지의 모든 종속 항목 경로를 표시합니다. 출력을 간소화하기 위해 여러 경로가 동일한 접미사를 공유하는 경우 첫 번째 최단 경로만 표시됩니다. 예를 들어 A -> B -> X는 표시되지만 더 긴 A -> C -> B -> X는 생략됩니다. 즉, 타겟 모듈 X에 직접 종속되는 모든 모듈 Y에 대해 출력에는 Y를 통과하여 X에 도달하는 최단 경로만 포함됩니다.path <arg>...:all_paths와 동일한 시맨틱스를 갖지만--from모듈 중 하나에서 인수 모듈 중 하나로의 단일 경로만 표시합니다.explain <arg>...: 종속 항목 그래프에 지정된 모듈이 표시되는 모든 위치와 이러한 모듈에 직접 종속되는 모듈을 표시합니다.explain명령어의 출력은 기본적으로all_paths명령어의 정리된 버전으로, 1) 루트 모듈, 2) 인수 모듈로 이어지는 루트 모듈의 직접 종속 항목, 3) 인수 모듈의 직접 종속 항목, 4) 인수 모듈 자체를 포함합니다 (예 참고).show_repo <arg>...: 지정된 저장소의 정의를 표시합니다 (예 참고).--all_repos를 사용하여 전체 종속 항목 그래프에 있는 모든 저장소의 정의를 표시하거나--all_visible_repos를 사용하여--base_module에서 볼 수 있는 모든 저장소의 정의를 표시합니다.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기본값: 'false': 출력 그래프에 각 모듈의 버전 확인에 관한 추가 정보를 포함합니다. 확인 중에 모듈 버전이 변경된 경우 이를 대체한 버전 또는 원래 버전, 대체된 이유, 이유가 최소 버전 선택인 경우 새 버전을 요청한 모듈을 표시합니다.--include_unused기본값: '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기본값: 'false': 출력 그래프에 순환 가장자리를 포함합니다.--include_builtin기본값: 'false' : 출력 그래프에 기본 제공 모듈 (예:@bazel_tools)을 포함합니다. 기본 제공 모듈은 다른 모든 모듈에서 암시적으로 종속되므로 출력이 크게 어수선해지기 때문에 이 플래그는 기본적으로 사용 중지되어 있습니다.--charset <charset>기본값: 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
show_repo 옵션
show_repo는 다양한 출력 형식을 지원합니다.
--output <mode>: 저장소 정의가 표시되는 방식을 변경합니다.<mode>는 다음 중 하나일 수 있습니다.text(기본값): 저장소 정의를 Starlark로 표시합니다.streamed_proto: 길이로 구분된 프로토콜 버퍼 스트림을 출력합니다.Repositorystreamed_jsonproto:--output streamed_proto와 유사하게Repository프로토콜 버퍼 스트림을 출력하지만 NDJSON 형식으로 출력합니다.
기타 옵션
그 밖에도 다음과 같은 옵션이 있습니다.
--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: load("@@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") 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, ) ## stardoc: load("@@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") 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, )bazel mod show_repo는use_repo로 가져온 저장소와use_repo_rule로 만든 저장소에서도 작동합니다. 표시 저장소 이름 또는--all_visible_repos로show_repo를 호출하면 표시 저장소 이름이##프리픽스가 붙은 줄에 표시됩니다.bazel mod show_repo @jq_linux_arm64 bazel mod show_repo --all_visible_repos## @jq_linux_arm64: load("@@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") http_file( name = "+http_file+jq_linux_arm64", executable = True, integrity = "sha256-TdLYoGYd8LIvG7mh+YMPBrbzuPfZEhGh7118TwaotKU=", urls = ["https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-arm64"], )종속 항목 그래프에서 사용되는 모듈 확장 프로그램을 확인합니다.
bazel mod graph --extension_info=usages<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>