Bazel harici bağımlılıkları ve kullanılan kaynak dosyaları (hem metin hem de ikili program) destekler derlemeniz gerekir. Örneğin, GitHub deposunda, Maven yapısında veya yerel mevcut çalışma alanınızın dışında tutun.
Bazel 6.0 sürümünden itibaren, dış bağımlılıkları Bazel ile yönetmenin iki yolu vardır:
geleneksel, depo odaklı WORKSPACE
sistemi ve
yeni modül odaklı MODULE.bazel
sistemi (kod adı Bzlmod,
ve --enable_bzlmod
işaretiyle etkinleştirilir. Bu iki sistem kullanılabilir
ancak Bzlmod gelecekte Bazel'in yerine WORKSPACE
sisteminin yerini alacak
hakkında daha fazla bilgi edinmek için Bzlmod taşıma rehberine
taşıma.
Bu belgede dış bağımlılık yönetimiyle ilgili kavramlar açıklanmaktadır konusuna değindik.
Kavramlar
Kod deposu
Kaynağı içeren WORKSPACE
veya WORKSPACE.bazel
dosyasına sahip dizin
kullanılacak dosyalardan oluşmalıdır. Genellikle depo olarak kısaltılır.
Ana depo
Geçerli Bazel komutunun çalıştırıldığı depo.
Çalışma alanı
Tüm Bazel komutlarının paylaştığı ortam aynı ana depoda çalışır.
Geçmişte “depo” kavramlarının ve "workspace", oldu birleştirilmiş; "çalışma alanı" terimi genellikle proje yaşam döngüsünde veri deposudur ve bazen "depo" ile eş anlamlı olarak da kullanılır.
Standart depo adı
Bir deponun adreslenebileceği kurallı ad. Şu bağlamda:
her deponun tek bir standart adı olur. Depo içindeki bir hedef
Standart adı canonical_name
olan kullanıcılar etiket tarafından çözülebilir
@@canonical_name//pac/kage:target
(çift @
değerine dikkat edin).
Ana depoda standart ad olarak her zaman boş dize bulunur.
Görünen depo adı
Bir depoya, başka bir depo bağlamında hitap edilebilir.
Bu, deponun "takma adı" olarak düşünülebilir: Standart ada sahip depo
michael
, depo bağlamında mike
olarak görünen ada sahip olabilir
alice
, ancak depo bağlamında mickey
olarak görünen ada sahip olabilir
bob
. Bu durumda, michael
içindeki bir hedef etiket tarafından ele alınabilir
alice
bağlamında @mike//pac/kage:target
(@
öğesine dikkat edin).
Buna karşılık, bu bir depo eşlemesi olarak da anlaşılabilir: her depo "görünen kod deposu adı"ndan bir eşlemeyi korur "standart depo adına" dönüştürmenizi öneririz.
Depo kuralı
Bazel'a bir materyalin nasıl gerçeğe dönüştürüleceğini anlatan, depo
depodur. Örneğin, "belirli bir URL'den bir ZIP arşivi indir" olabilir
veya "belirli bir Maven eserini getirin ve bunu bir sonraki
java_import
hedefi" veya basitçe "yerel bir dizini simgesel bağlayın". Her depo
uygun sayıda bağımsız değişkene sahip bir depo kuralı çağırarak tanımlanır.
Nasıl yazılacağı hakkında daha fazla bilgi için Depo kuralları bölümüne bakın depo kurallarınızı da oluşturabilirsiniz.
Şu ana kadar en yaygın olan depo kuralları
http_archive
: Arşiv indirir
URL'den çıkarıp çıkarır ve
local_repository
, şu anlama gelir:
yerel dizindir.
Kod deposu getir
Bir depoyu ilişkili çalıştırarak yerel diskte kullanılabilir hale getirme işlemi depo kuralı. Bir çalışma alanında tanımlanan kod depoları, yerel diskte kullanılamıyor getirmesi gerekir.
Normalde, Bazel bir depoyu yalnızca depodan bir şey gerektiğinde getirir. ve depo getirilmedi. Depo zaten getirildiyse daha önce, Bazel yalnızca tanımı değiştiyse yeniden getirir.
Dizin düzeni
Bu depo, getirildikten sonra external
alt dizininde bulunabilir.
çıktı tabanını standart adının altında bulabilirsiniz.
Şu komutu çalıştırarak deponun içeriğini
standart ad canonical_name
:
ls $(bazel info output_base)/external/ canonical_name
Dış bağımlılıkları Bzlmod ile yönetin
Yeni harici bağımlılık alt sistemi Bzlmod, depo ile doğrudan çalışmıyor tanımlar. Bunun yerine modüllerden bir bağımlılık grafiği oluşturur, extensions'ı gösterir ve depoları buna göre tanımlar.
Bazel modülleri, birden çok içerebilen Bazel projesidir.
her biri, bağımlı olduğu diğer modüllerle ilgili meta verileri yayınlayan sürümler
beklemeye gerek yoktur. Bir modülün depo kökünde bir MODULE.bazel
dosyası,
WORKSPACE
dosya Bu dosya, modülün manifest adını belirten ve adını belirten bir manifestodur.
bağımlıların listesini ve diğer bilgileri içerir. Aşağıdakiler,
örnek:
module(name = "my-module", version = "1.0")
bazel_dep(name = "rules_cc", version = "0.0.1")
bazel_dep(name = "protobuf", version = "3.19.0")
Bir modül yalnızca Bzlmod'un tek bir programda aradığı doğrudan bağımlılıklarını listelemelidir.
Bazel sicil dairesi — varsayılan olarak Bazel Central
Kayıt otoritesi. Kayıt otoritesi
bağımlılıklarının MODULE.bazel
dosyalarını kullanarak Bazel'in
geçişli bağımlılık grafiğine göz atın.
Her modül için bir sürümün seçildiği sürüm çözümlemesinden sonra,
Bazel, her modüle yönelik bir depo tanımlamayı öğrenmek için kayıt defterine tekrar başvuruyor
(çoğu durumda http_archive
kullanılarak).
Modüller, etiketler adı verilen özelleştirilmiş veri parçalarını da belirtebilir. modül çözümlemesinden sonra modül uzantıları tarafından tüketilir ek veri havuzları tanımlamaktır. Bu uzantılar, depoya benzer özelliklere sahiptir kurallarıyla dosya G/Ç ve ağ gönderme gibi işlemler yapmalarını sağlar. kabul edersiniz. Diğer özelliklerin yanı sıra, Bazel'in diğer paketlerle aynı zamanda Bazel’den oluşturulan bağımlılık grafiğini de dikkate alarak modüllerinde yer alır.
Bzlmod'daki harici bağlantılar
- bazelbuild/örneklerde Bzlmod kullanım örnekleri
- Bazel Dış Bağımlılıkları Revizyon (orijinal Bzlmod tasarım dokümanı)
- Bzlmod'da BazelCon 2021 konuşması
- Bzlmod'da Bazel Topluluk Günü konuşması
WORKSPACE
ile depo tanımlayın
Geçmişte, aynı hesapta depoları tanımlayarak dış bağımlılıkları
WORKSPACE
(veya WORKSPACE.bazel
) dosyası. Bu dosya,
Derleme kuralları yerine depo kuralları kullanan BUILD
dosyaları.
Aşağıdaki snippet, http_archive
kod deposu kuralını
WORKSPACE
dosyası:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "foo",
urls = ["https://example.com/foo.zip"],
sha256 = "c9526390a7cd420fdcec2988b4f3626fe9c5b51e2959f685e8f4d170d1a9bd96",
)
Snippet, standart adı foo
olan bir depoyu tanımlıyor. WORKSPACE
içinde
bir kod deposunun standart adı aynı zamanda
tüm diğer depolar.
Şu ürünlerde bulunan işlevlerin tam listesine göz atın:
WORKSPACE
dosya.
WORKSPACE
sistemindeki eksikler
WORKSPACE
sisteminin kullanıma sunulmasından bu yana geçen yıllarda, kullanıcılar
aşağıdakiler dahil olmak üzere birçok sorunlu nokta vardır:
- Bazel herhangi bir bağımlılığın
WORKSPACE
dosyasını değerlendirmez. Dolayısıyla, geçişli bağımlılıklar anaWORKSPACE
kod depolarını da içerir. - Bu sorunu çözmek için projelerde "deps.bzl" ve burada
Buna karşılık birden fazla depoyu tanımlayan bir makro tanımlar ve kullanıcılardan
bu makroyu
WORKSPACE
dosyalarında çağırabilir.- Bunun kendi sorunları vardır: makrolar diğer
.bzl
dosyalarınıload
. Bu nedenle, bu projelerin geçişli bağımlılıklarını tanımlaması, "dep" makrosuna sahip olabilir veya kullanıcının birden çok katmanlı "deps" makrolarında da yer alır. - Bazel,
WORKSPACE
dosyasını sırayla değerlendirir. Ayrıca, bağımlılıklar, herhangi bir değer belirtilmeden URL'lerlehttp_archive
kullanılarak belirtilir sürüm bilgileri. Bu da, kötü amaçlı yazılım kullanma konusunda güvenilir bir yol olmadığı bağımlılıklarında sürüm çözünürlüğü kullanılabilir (A
B
veC
;B
veC
,D
ürününün farklı sürümlerine bağlıdır.
- Bunun kendi sorunları vardır: makrolar diğer
WORKSPACE eksiklikleri nedeniyle Bzlmod eski sürümün yerine Gelecekteki Bazel sürümlerinde WORKSPACE sistemi. Lütfen Bzlmod taşıma işlemini okuyun. rehberini inceleyin.