बाहरी डिपेंडेंसी के बेहतर विषय

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है किसी समस्या की शिकायत करें सोर्स देखें रात · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

वर्कस्पेस में डिपेंडेंसी को शैडो करना

जब भी हो सके, अपने प्रोजेक्ट में एक वर्शन नीति का पालन करें, यह उन डिपेंडेंसी के लिए ज़रूरी है जिन्हें इकट्ठा करके फ़ाइनल किया जाता है बाइनरी. अन्य मामलों के लिए, डिपेंडेंसी को शैडो किया जा सकता है:

मेरा प्रोजेक्ट/वर्कस्पेस

workspace(name = "myproject")

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

A/वर्कस्पेस

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

बी/वर्कस्पेस

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 और B, दोनों डिपेंडेंसी, testrunner के अलग-अलग वर्शन पर निर्भर करती हैं. दोनों को बिना किसी टकराव के myproject में शामिल करें. इसके लिए, इन दोनों को अलग-अलग नाम दें 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"}
)

हीरे जोड़ने के लिए भी इस तरीके का इस्तेमाल किया जा सकता है. उदाहरण के लिए, अगर A और B एक जैसी डिपेंडेंसी है, लेकिन उसे अलग-अलग नाम से कॉल किया है. इसके बाद, उन डिपेंडेंसी को जोड़ें myproject/WORKSPACE में.

कमांड लाइन से डेटा स्टोर करने की जगहों को बदलना

कमांड लाइन से, एलान किए गए डेटा स्टोर करने की जगह को लोकल डेटा स्टोर करने की जगह से बदलने के लिए, का इस्तेमाल करें --override_repository फ़्लैग करें. इस फ़्लैग का उपयोग करने से इसके बिना बाहरी डेटा संग्रह स्थान की सामग्री बदल जाती है अपना सोर्स कोड बदल रहे हैं.

उदाहरण के लिए, @foo को लोकल डायरेक्ट्री /path/to/local/foo में बदलने के लिए, --override_repository=foo=/path/to/local/foo फ़्लैग को पास करें.

इस्तेमाल के उदाहरणों में ये शामिल हैं:

  • डीबग करने से जुड़ी समस्याएं. उदाहरण के लिए, http_archive रिपॉज़िटरी को बदलकर लोकल डायरेक्ट्री की मदद से, जहां आप ज़्यादा आसानी से बदलाव कर सकते हैं.
  • वेंडरिंग. अगर आप किसी ऐसे माहौल में हैं जहां आप नेटवर्क कॉल नहीं कर सकते, लोकल डायरेक्ट्री पर ले जाने के लिए, नेटवर्क पर आधारित डेटा स्टोर करने की जगह के नियमों को ओवरराइड करें आज़माएं.

प्रॉक्सी का इस्तेमाल करना

Baज़ल, HTTPS_PROXY और HTTP_PROXY से प्रॉक्सी पते चुनता है एनवायरमेंट वैरिएबल देता है और इनका इस्तेमाल HTTP और HTTPS फ़ाइलों को डाउनलोड करने के लिए करता है (अगर बताया गया है).

आईपीवी6 के साथ काम करने की सुविधा

सिर्फ़ आईपीवी6 मशीनों पर, Baze बिना किसी बदलाव के डिपेंडेंसी डाउनलोड कर सकता है. हालांकि, ड्यूअल-स्टैक आईपीवी4/IPv6 मशीनों पर चलने वाला Baज़र, Java की तरह ही काम करता है. अगर यह चालू हो, तो IPv4 को प्राथमिकता दें. कुछ परिस्थितियों में, उदाहरण के लिए जब IPv4 नेटवर्क, बाहरी पतों का समाधान/पहुंच नहीं कर सकता. इसकी वजह से Network unreachable अपवाद हो सकते हैं और बिल्ड फ़ेल हो सकता है. इन मामलों में, आपके पास वेब ब्राउज़र पर IPv6 को प्राथमिकता देने के लिए बेज़ल का व्यवहार java.net.preferIPv6Addresses=true सिस्टम प्रॉपर्टी के लिए सबमिट किया गया है. खास तौर पर:

ऑफ़लाइन बिल्ड

कभी-कभी हो सकता है कि आप बिल्ड को ऑफ़लाइन चलाना चाहें, जैसे कि हवाई जहाज़. ऐसे आसान इस्तेमाल के लिए, डेटा स्टोर करने की ज़रूरी जगहों को प्रीफ़ेच करें bazel fetch या bazel sync. के दौरान और डेटा संग्रह स्थान फ़ेच करने को अक्षम करने के लिए बिल्ड के लिए, --nofetch विकल्प का इस्तेमाल करें.

असल ऑफ़लाइन बिल्ड के लिए, जहां एक अलग इकाई सभी ज़रूरी फ़ाइलें उपलब्ध कराती है, Basel का विकल्प, --distdir विकल्प के साथ काम करता है. यह फ़्लैग बेज़ल को पहली बार इन चीज़ों की जांच करने के लिए कहता है जब रिपॉज़िटरी नियम बेज़ेल को कहता है कि ctx.download से कोई फ़ाइल फ़ेच करें या ctx.download_and_extract. इन्होंने बदलाव किया है ज़रूरी फ़ाइल का हैश योग देते हुए, Baze, पहले यूआरएल का बेस नेम. साथ ही, हैश मैच होने पर लोकल कॉपी का इस्तेमाल करता है.

बेज़ल इस तकनीक का इस्तेमाल करके, डिस्ट्रिब्यूशन से ऑफ़लाइन बूटस्ट्रैप करते हैं आर्टफ़ैक्ट है. ऐसा करने के लिए, यह सभी ज़रूरी बाहरी तरीकों को इकट्ठा करता है डिपेंडेंसी एक इंटरनल distdir_tar.

Baज़ल, बिना जानकारी के रिपॉज़िटरी के नियमों में आर्बिट्रेरी कमांड इस्तेमाल करने की अनुमति देता है अगर वे नेटवर्क से संपर्क करते हैं, और इसलिए वे पूरी तरह से ऑफ़लाइन बिल्ड लागू नहीं कर सकते. यहां की यात्रा पर हूं जांचें कि कोई बिल्ड ऑफ़लाइन ठीक से काम कर रहा है या नहीं, फिर मैन्युअल रूप से नेटवर्क को ब्लॉक करें (जैसा कि Basel अपने बूटस्ट्रैप में करता है परीक्षण).