Workspace'te bağımlılıkları gölgeleme
Mümkünse projenizde tek bir sürüm politikası kullanın. Bu politika, derlediğiniz ve nihai ikili dosyanızda kullandığınız bağımlılıklar için gereklidir. Diğer durumlarda, bağımlılıkları gölgeleyebilirsiniz:
projem/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ümlerini kullanır.
myproject/WORKSPACE
içinde farklı adlar vererek her ikisini de çakışmadan myproject
öğesine ekleyin:
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 bu bağımlılığı 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
Komut satırından, bildirilen bir deposu yerel bir depoyla geçersiz kılmak için --override_repository
işaretini kullanın. Bu işareti kullanmak, 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ı şunlardır:
- Sorunları ayıklama Örneğin, bir
http_archive
deposunu, değişiklikleri daha kolay yapabileceğiniz yerel bir dizinle geçersiz kılmak için. - Tedarikçi firma Ağ çağrıları yapamayacağınız bir ortamdaysanız bunun yerine ağ tabanlı depo kurallarını yerel dizinlere işaret edecek şekilde geçersiz kılın.
Proxy kullanma
Bazel, HTTPS_PROXY
ve HTTP_PROXY
ortam değişkenlerinden proxy adreslerini alır ve HTTP
ile HTTPS
dosyalarını (belirtildiyse) indirmek için bunları kullanır.
IPv6 desteği
Yalnızca IPv6 kullanan makinelerde Bazel, bağımlılıkları değişiklik yapmadan indirebilir. Ancak Bazel, çift yığınlı IPv4/IPv6 makinelerde Java ile aynı kuralı uygular ve etkinse IPv4'ü tercih eder. Bazı durumlarda, örneğin IPv4 ağının harici adreslere çözümleyemediği veya bu adreslere erişemediği durumlarda bu durum Network
unreachable
istisnalarına ve derleme hatalarına neden olabilir. Bu tür durumlarda, java.net.preferIPv6Addresses=true
sistem özelliğini kullanarak Bazel'in IPv6'yı tercih etme davranışını geçersiz kılabilirsiniz.
Özellikle:
--host_jvm_args=-Djava.net.preferIPv6Addresses=true
başlatma seçeneğini kullanın. Örneğin,.bazelrc
dosyanıza aşağıdaki satırı ekleyerek:startup --host_jvm_args=-Djava.net.preferIPv6Addresses=true
İnternete bağlanması gereken Java derleme hedeflerini çalıştırırken (örneğin entegrasyon testleri için)
--jvmopt=-Djava.net.preferIPv6Addresses=true
araç işaretini kullanın. Örneğin,.bazelrc
dosyanıza şunları ekleyin:build --jvmopt=-Djava.net.preferIPv6Addresses
Bağımlılık sürümü çözümü için
rules_jvm_external
kullanıyorsanız Coursier için JVM seçenekleri sağlamak amacıylaCOURSIER_OPTS
ortam değişkenine-Djava.net.preferIPv6Addresses=true
da ekleyin.
Çevrimdışı derlemeler
Bazen, uçakta seyahat ederken olduğu gibi bir derlemeyi çevrimdışı olarak çalıştırmak isteyebilirsiniz. Bu tür basit kullanım alanları için bazel fetch
veya bazel sync
ile gerekli depoları önceden alın. Derleme sırasında başka depoların getirilmesini devre dışı bırakmak için --nofetch
seçeneğini kullanın.
Farklı bir öğenin gerekli tüm dosyaları sağladığı 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'e önce bu seçenekle belirtilen dizinleri aramasını söyler. Bazel, gereken dosyanın karma toplamını sağlayarak 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ısını kullanarak çevrimdışı önyükleme yapmak için bu tekniği kullanır.
Bunu, gerekli tüm harici bağımlılıkları dahili bir distdir_tar
içinde toplayarak yapar.
Bazel, ağa çağrı yapıp yapmadıklarını bilmeden depo kurallarında rastgele komutların yürütülmesine izin verir ve bu nedenle tamamen çevrimdışı derlemeleri zorunlu kılmaz. Bir derlemenin çevrimdışı olarak düzgün çalışıp çalışmadığını test etmek için ağı manuel olarak engelleyin (Bazel'in önyükleme testinde yaptığı gibi).