Dış bağımlılıklarla ilgili ileri düzey konular

. Sorun bildirin Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

WORKSPACE'te bağımlılıkları gölgelendirme

Mümkün olduğunda projenizde her birinin oluşturduğunuz bağımlılıklar için gereklidir. Projenizin sonunda ikilik. Diğer durumlarda bağımlılıkları gölgeleyebilirsiniz:

projem/ÇALIŞMA ALANI

workspace(name = "myproject")

local_repository(
    name = "A",
    path = "../A",
)
local_repository(
    name = "B",
    path = "../B",
)

A/ÇALIŞMA ALANI

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/ÇALIŞMA ALANI

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 = "..."
)

A ve B bağımlılarının ikisi de testrunner ürününün farklı sürümlerine bağlıdır. Her ikisini de çakışma olmadan myproject içine myproject/WORKSPACE:

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 sahip ama farklı adlarla adlandırabilir ve bu bağımlılıklara myproject/WORKSPACE içinde.

Komut satırından depoları geçersiz kılma

Komut satırından, bildirilen depoyu yerel bir depoyla geçersiz kılmak için: her bir arama terimi için --override_repository tıklayın. Bu işaretin kullanılması harici depoların içeriğini değiştirir: kaynak kodunuzu değiştirebilirsiniz.

Örneğin, @foo yerine /path/to/local/foo yerel dizinini geçersiz kılmak için --override_repository=foo=/path/to/local/foo işaretini geçin.

Kullanım alanları arasında şunlar yer alır:

  • Hata ayıklama sorunları. Örneğin, bir http_archive deposunu yerel dizinde kalır.
  • Tedarikçi firma. Ağ çağrıları yapamayacağınız bir ortamdaysanız Ağ tabanlı depo kurallarını yerel dizinlere işaret edecek şekilde geçersiz kıl .
ziyaret edin.

Proxy kullanma

Bazel, proxy adreslerini HTTPS_PROXY ve HTTP_PROXY reklamlarından alır ortam değişkenlerini kullanır ve bunları HTTP ve HTTPS dosyalarını indirmek için kullanır ( belirtilir).

IPv6 desteği

Yalnızca IPv6 kullanan makinelerde Bazel, bağımlılıkları değişiklik yapmadan indirebilir. Ancak, çift yığınlı IPv4/IPv6 makinelerinde Bazel, Java ile aynı kuralı izler. IPv4 tercih edilir. Bazı durumlarda, örneğin IPv4'ün ağı çözümleyemez/harici adreslere erişemez. Bu durum, Network unreachable istisnalarına ve derleme hatalarına neden olabilir. Böyle durumlarda, Bazel'in java.net.preferIPv6Addresses=true sistem özelliği ekleyin. Özellikle:

Çevrimdışı derlemeler

Bazen bir yapıyı çevrimdışı olarak çalıştırmak isteyebilirsiniz. Örneğin, ekleyebilirsiniz. Böyle basit kullanım alanları için gerekli depoları bazel fetch veya bazel sync. Şu süreçte daha fazla depo getirmeyi devre dışı bırakmak için: için --nofetch seçeneğini kullanın.

Gerekli tüm dosyaların farklı bir varlığın sağlandığı gerçek çevrimdışı derlemeler için Bazel, --distdir seçeneğini destekler. Bu işaret, Bazel'a önce veri saklama kuralı, Bazel'dan ctx.download ile bir dosyayı getirin veya ctx.download_and_extract. Ölçüt gerekli dosyanın karma toplamını sağlarsa Bazel, basename içerir ve karma değer eşleşirse yerel kopyayı kullanır.

Bazel, bu tekniği kullanarak dağıtım test eder. Bunu, gerekli tüm harici verileri toplayarak bağımlılıkları dahili distdir_tar.

Bazel, bilgi deposu kurallarında rastgele komutların bilinmeden yürütülmesine olanak tanır şebekeye çağrı gönderirler ve bu nedenle tam çevrimdışı derlemeleri zorlayamazlar. Alıcı: bir derlemenin çevrimdışı olarak düzgün çalışıp çalışmadığını test edin, ağı manuel olarak engelleyin (çünkü Bazel, kendi önyüklemesinde test) gerektirir.