WORKSPACE'te bağımlılıkları gölgeleme
Mümkün olduğunda projenizde tek bir sürüm politikası kullanın. Bu, derlediğiniz ve nihai ikili dosyanızda yer alan bağımlılıklar için gereklidir. Diğer durumlarda bağımlılıkları gölgeleyebilirsiniz:
myproject/WORKSPACE
workspace(name = "myproject")
local_repository(
name = "A",
path = "../A",
)
local_repository(
name = "B",
path = "../B",
)
A/WORKSPACE
workspace(name = "A")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "testrunner",
urls = ["https://github.com/testrunner/v1.zip"],
sha256 = "...",
)
B/WORKSPACE
workspace(name = "B")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "testrunner",
urls = ["https://github.com/testrunner/v2.zip"],
sha256 = "..."
)
Hem A hem de B bağımlılıkları, testrunner'nin farklı sürümlerine bağlıdır.
myproject'da her ikisini de çakışma olmadan eklemek için myproject/WORKSPACE'da bunlara farklı adlar verin:
workspace(name = "myproject")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "testrunner-v1",
urls = ["https://github.com/testrunner/v1.zip"],
sha256 = "..."
)
http_archive(
name = "testrunner-v2",
urls = ["https://github.com/testrunner/v2.zip"],
sha256 = "..."
)
local_repository(
name = "A",
path = "../A",
repo_mapping = {"@testrunner" : "@testrunner-v1"}
)
local_repository(
name = "B",
path = "../B",
repo_mapping = {"@testrunner" : "@testrunner-v2"}
)
Bu mekanizmayı elmasları birleştirmek için de kullanabilirsiniz. Örneğin, A ve B aynı bağımlılığa sahipse ancak farklı adlarla çağırıyorsa bu bağımlılıkları myproject/WORKSPACE içinde birleştirin.
Komut satırından depoları geçersiz kılma
Bildirilmiş bir depoyu komut satırından yerel bir depoyla geçersiz kılmak için --override_repository işaretini kullanın. Bu işaret kullanıldığında, kaynak kodunuz değiştirilmeden harici depoların içeriği değiştirilir.
Örneğin, @foo değerini yerel dizin /path/to/local/foo ile geçersiz kılmak için --override_repository=foo=/path/to/local/foo işaretini iletin.
Kullanım alanları:
- Sorunları ayıklama. Örneğin, değişiklikleri daha kolay yapabileceğiniz bir yerel dizine
http_archivedeposunu geçersiz kılmak için. - Tedarikçi. Ağ araması yapamayacağınız bir ortamdaysanız ağ tabanlı depo kurallarını geçersiz kılarak bunun yerine yerel dizinleri işaret edin.
Proxy kullanma
Bazel, HTTPS_PROXY ve HTTP_PROXY ortam değişkenlerinden proxy adreslerini alır ve bunları HTTP ile HTTPS dosyalarını indirmek için kullanır (belirtilmişse).
IPv6 desteği
Yalnızca IPv6 kullanan makinelerde Bazel, bağımlılıkları herhangi bir değişiklik yapmadan indirebilir. Ancak, çift yığınlı IPv4/IPv6 makinelerde Bazel, Java ile aynı kuralı izler ve etkinse IPv4'ü tercih eder. Bazı durumlarda (ör. IPv4 ağı, harici adresleri çözemediğinde/bu adreslere ulaşamadığında) bu durum Network
unreachable istisnalarına ve derleme hatalarına neden olabilir. Bu durumlarda, java.net.preferIPv6Addresses=true system
property özelliğini kullanarak Bazel'ın davranışını geçersiz kılabilir ve IPv6'yı tercih edebilirsiniz.
Özellikle:
--host_jvm_args=-Djava.net.preferIPv6Addresses=truestartup option'ı kullanın. Örneğin,.bazelrcdosyanıza aşağıdaki satırı ekleyin:startup --host_jvm_args=-Djava.net.preferIPv6Addresses=trueİnternete bağlanması gereken Java derleme hedefleri (ör. entegrasyon testleri için) çalıştırırken
--jvmopt=-Djava.net.preferIPv6Addresses=truetool flag'i kullanın. Örneğin,.bazelrcdosyanıza şunları ekleyin:build --jvmopt=-Djava.net.preferIPv6AddressesBağımlılık sürümü çözümlemesi için
rules_jvm_externalkullanıyorsanızCOURSIER_OPTSortam değişkenine-Djava.net.preferIPv6Addresses=trueekleyerek Coursier için JVM seçenekleri de sağlayın.
Çevrimdışı derlemeler
Bazen, örneğin uçakla seyahat ederken derlemeyi çevrimdışı olarak çalıştırmak isteyebilirsiniz. Bu tür basit kullanım alanları için gereken depoları bazel fetch veya bazel sync ile önceden getirin. Derleme sırasında daha fazla depo getirme işlemini devre dışı bırakmak için --nofetch seçeneğini kullanın.
Gerekli tüm dosyaların farklı bir varlık tarafından sağlandığı gerçek çevrimdışı derlemeler için Bazel, --distdir seçeneğini destekler. Bu işaret, bir depo kuralı Bazel'den ctx.download veya ctx.download_and_extract ile dosya getirmesini istediğinde Bazel'in önce bu seçenekle belirtilen dizinlere bakmasını söyler. Gerekli dosyanın karma toplamını sağlayarak Bazel, ilk URL'nin temel adıyla eşleşen bir dosya arar ve karma eşleşirse yerel kopyayı kullanır.
Bazel, dağıtım yapıtından çevrimdışı olarak başlatmak için bu tekniği kullanır.
Bu işlem, gerekli tüm harici bağımlılıkları dahili bir distdir_tar içinde toplayarak yapılır.
Bazel, ağa bağlanıp bağlanmadıklarını bilmeden depo kurallarında rastgele komutların yürütülmesine izin verir. Bu nedenle, tamamen çevrimdışı derlemeleri zorunlu kılamaz. Bir derlemenin çevrimdışı olarak doğru şekilde çalışıp çalışmadığını test etmek için ağı manuel olarak engelleyin (Bazel, bootstrap testinde yaptığı gibi).