Bazel 6.3.0'da kullanıma sunulan mod
komutu, Bzlmod etkinleştirildiğinde kullanıcının harici bağımlılık grafiğini anlamasına yardımcı olacak çeşitli araçlar sağlar. Bağımlılık grafiğini görselleştirmenize, belirli bir modülün veya modülün bir sürümünün neden grafikte bulunduğunu öğrenmenize, modülleri destekleyen depo tanımlarını görüntülemenize, modül uzantılarının ve oluşturdukları depoların kullanımlarını incelemenize ve diğer işlevlerin yanı sıra daha birçok işlem yapmanıza olanak tanır.
Söz dizimi
bazel mod <subcommand> [<options>] [<arg> [<arg>...]]
Kullanılabilen alt komutlar ve bunlara karşılık gelen gerekli bağımsız değişkenler şunlardır:
graph
: Kök modülden itibaren projenin tam bağımlılık grafiğini görüntüler.--from
içinde bir veya daha fazla modül belirtilirse bu modüller doğrudan kök dizinin altında gösterilir ve grafik yalnızca kök dizinden başlayarak genişletilir (örneği inceleyin).deps <arg>...
:graph
'a benzer şekilde, belirtilen modüllerin her birinin çözülmüş doğrudan bağımlılıklarını gösterir.all_paths <arg>...
: Kökten belirtilen<arg>...
'a kadar mevcut tüm yolları gösterir.--from
içinde bir veya daha fazla modül belirtilirse bu modüller doğrudan kök dizinin altında gösterilir ve grafik,--from
modüllerinden bağımsız değişken modüllerine giden mevcut herhangi bir yolu içerir (örneğe bakın).path <arg>...
:all_paths
ile aynı semantiklere sahiptir ancak yalnızca--from
modüllerinden birine argüman modüllerinden birine giden tek bir yol gösterir.explain <arg>...
: Belirtilen modüllerin bağımlılık grafiğinde göründüğü tüm yerleri ve bunlara doğrudan bağlı olan modülleri gösterir.explain
komutunun çıkışı, temel olarakall_paths
komutunun budanmış bir sürümüdür. Bu sürümde 1) kök modül; 2) kök modülün bağımsız değişken modüllerine yönlendiren doğrudan bağımlılıkları; 3) bağımsız değişken modüllerinin doğrudan bağımlıları ve 4) bağımsız değişken modüllerinin kendisi bulunur (örnek bölümüne bakın).show_repo <arg>...
: Belirtilen depoların tanımını gösterir (örnek bölümüne bakın).show_extension <extension>...
: Belirtilen uzantıların her biri hakkında bilgi görüntüler: Oluşturulan depoların, bunlarıuse_repo
kullanarak içe aktaran modüllerle birlikte listesi ve bu uzantının, kullanıldığı her modülde belirtilen etiketleri veuse_repo
çağrılarını içeren kullanım listesi (örnek'e bakın).
<arg>
, bir veya daha fazla modülü ya da depoyu ifade eder. Şunlardan biri olabilir:
<root>
değişmez dizesi: Geçerli projenizi temsil eden kök modül.<name>@<version>
:<version>
sürümündeki<name>
modülü. Kayıt defteri dışında bir geçersiz kılma içeren bir modül için<version>
olarak alt çizgi (_
) kullanın.<name>
:<name>
modülünün mevcut tüm sürümleri.@<repo_name>
:--base_module
bağlamında belirtilen görünür ada sahip depo.@@<repo_name>
: Belirtilen kanonik ada sahip depo.
Modülleri belirtmeyi gerektiren bir bağlamda, modüllere karşılık gelen depoları (uzantı tarafından oluşturulan depoların aksine) belirten <arg>
'ler de kullanılabilir. Buna karşılık, depo belirtmeyi gerektiren bir bağlamda, modüllere atıfta bulunan <arg>
'ler ilgili depoların yerini alabilir.
<extension>
, <arg><label_to_bzl_file>%<extension_name>
biçiminde olmalıdır.
<label_to_bzl_file>
kısmı, depoya göre bir etiket olmalıdır (örneğin, //pkg/path:file.bzl
).
Aşağıdaki seçenekler yalnızca grafikleri (graph
, deps
, all_paths
, path
ve explain
) yazdıran alt komutları etkiler:
--from <arg>[,<arg>[,...]]
varsayılan:<root>
:graph
,all_paths
,path
veexplain
'te grafiğin genişletildiği modüller. Daha fazla bilgi için alt komutların açıklamalarını inceleyin.--verbose
varsayılan: "false": Çıkış grafiğine her modülün sürüm çözünürlüğü hakkında ek bilgiler ekleyin. Çözünürlük sırasında modül sürümü değiştiyse hangi sürümün değiştirildiğini veya orijinal sürümün hangisi olduğunu, değiştirilme nedenini ve neden Minimal Sürüm Seçimi ise hangi modüllerin yeni sürümü istediğini gösterin.--include_unused
default: "false": Orijinal olarak bağımlılık grafiğinde bulunan ancak modül çözümlemesinden sonra kullanılmayan modülleri çıkış grafiğine ekleyin.--extension_info <mode>
: Çıkış grafiğinin bir parçası olarak modül uzantısı kullanımları hakkında bilgi ekleyin (örneğe bakın).<mode>
aşağıdakilerden biri olabilir:hidden
(varsayılan): Uzantılarla ilgili hiçbir şey göstermez.usages
: Uzantıların kullanıldığı her modülün altında uzantıları gösterin. Bunlar$<extension>
biçiminde basılır.repos
:usages
'a ek olarak, her uzantı kullanımının altındause_repo
kullanılarak içe aktarılan deposu gösterin.all
:usages
verepos
'ye ek olarak, herhangi bir modül tarafından içe aktarılmayan uzantı tarafından oluşturulan depoları da gösterir. Bu ek depolar, çıkışta oluşturma uzantılarının ilk oluşumunun altında gösterilir ve noktalı bir kenarla bağlanır.
--extension_filter <extension>[,<extension>[,...]]
: Belirtiliyse çıkış grafiği yalnızca belirtilen uzantıları kullanan modülleri ve bu modüllere giden yolları içerir. Boş bir uzantı listesi belirtmek (--extension_filter=
ürününde olduğu gibi), bağımlılık grafiğindeki herhangi bir modül tarafından kullanılan tüm uzantıları belirtmeye eşdeğerdir.--depth <N>
: Çıkış grafiğinin derinliği. 1 derinliği yalnızca kökü ve doğrudan bağımlılıklarını gösterir. Varsayılan olarakexplain
için 1,deps
için 2 ve diğerleri için sonsuz değerine ayarlanır.--cycles
default: "false": Döngü kenarlarını çıkış grafiğine dahil eder.--include_builtin
varsayılan: "false": Yerleşik modülleri (@bazel_tools
gibi) çıkış grafiğine dahil edin. Yerleşik modüller diğer tüm modüller tarafından dolaylı olarak bağımlı olduğundan bu işaret varsayılan olarak devre dışıdır. Bu da çıktıyı büyük ölçüde karmaşık hale getirir.--charset <charset>
varsayılan: utf8: Metin çıkışı için kullanılacak karakter kümesini belirtin. Geçerli değerler"utf8"
ve"ascii"
'dir. Tek önemli fark, grafiği"text"
çıkış biçiminde çizmek için kullanılan ve"ascii"
karakter kümesinde bulunmayan özel karakterlerdir. Bu nedenle, Unicode kullanamayan eski platformlarda da kullanımı desteklemek için"ascii"
karakter kümesi mevcuttur.--output <mode>
: Çıkış grafiğinin bir parçası olarak modül uzantısı kullanımları hakkında bilgi ekleyin.<mode
> aşağıdakilerden biri olabilir:text
(varsayılan): Çıkış grafiğinin kullanıcılar tarafından okunabilir bir temsili (ağaç olarak düzleştirilmiş).json
: Grafiği JSON nesnesi biçiminde (ağaç olarak düzleştirilmiş) döndürür.graph
: Grafiği Graphviz dot temsilinde döndürür.
bazel mod graph --output graph | dot -Tsvg > /tmp/graph.svg
Diğer seçenekler şunlardır:
--base_module <arg>
varsayılan:<root>
: Bağımsız değişkenlerdeki görünen depo adlarının yorumlanacağı bir modül belirtin. Bu bağımsız değişkenin@<repo_name>
şeklinde olabileceğini unutmayın. Bu bağımsız değişken her zaman kök modüle göre yorumlanır.--extension_usages <arg>[,<arg>[,...]]
:show_extension
'u yalnızca belirtilen modüllerdeki uzantı kullanımlarını gösterecek şekilde filtreler.
Örnekler
Projenizin harici bağımlılıklarını incelemek için mod
komutunu nasıl kullanabileceğiniz hakkında genel bir fikir edinmeniz amacıyla, gerçek bir Bazel projesinde mod
komutunun bazı olası kullanımları aşağıda gösterilmiştir.
MODULE.bazel
dosyası:
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")
Projenizin bağımlılığı grafiğinin tamamını görüntüleyin.
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 ...
Bağımlılık grafiğinin tamamını (kullanılmayan modüller dahil ve sürüm çözümü hakkında ek bilgilerle) gösterin.
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)
Bazı belirli modüllerden genişletilmiş bağımlılığı grafiğini görüntüleyin.
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 ...
Modüllerinizden ikisi arasındaki tüm yolları gösterin.
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 ...
Projenizin neden ve nasıl bazı modüllere bağlı olduğunu görün.
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 ...
Bazı modüllerinizin depolarının temel kuralını görme
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>
Bağımlılık grafiğinizde hangi modül uzantılarının kullanıldığını görme
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 ...
Bağımlılıklar grafiği kapsamında hangi depoların oluşturulduğunu ve belirli bir uzantıdan içe aktarıldığını görün.
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 ...
Bir uzantının oluşturulan depolarının listesini ve bu uzantının her modülde nasıl kullanıldığını görün.
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)... )
Uzantı tarafından oluşturulan bazı depoların temel kuralını görün.
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>