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"}
)
Elmasları birleştirmek için de bu mekanizmayı 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.
Depoları komut satırından 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şaretin kullanılması, kaynak kodunuzu değiştirmeden harici depoların içeriğini değiştirir.
Ö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_archive
deposunu geçersiz kılmak için. - Vendoring. 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=true
startup option'ı kullanın. Örneğin,.bazelrc
dosyanı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=true
tool flag'i kullanın. Örneğin,.bazelrc
dosyanıza aşağıdakileri ekleyin:build --jvmopt=-Djava.net.preferIPv6Addresses
Bağımlılık sürümü çözümü için
rules_jvm_external
kullanıyorsanızCOURSIER_OPTS
ortam değişkenine-Djava.net.preferIPv6Addresses=true
ekleyerek 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 gerekli 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 tüzel kişi 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 bir 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, depodaki kurallarda rastgele komutların yürütülmesine izin verir ancak bu komutların ağa bağlanıp bağlanmadığını bilmediği için 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).