वर्कस्पेस में डिपेंडेंसी को शैडो करना
जब भी हो सके, अपने प्रोजेक्ट में एक वर्शन नीति का पालन करें, यह उन डिपेंडेंसी के लिए ज़रूरी है जिन्हें इकट्ठा करके फ़ाइनल किया जाता है बाइनरी. अन्य मामलों के लिए, डिपेंडेंसी को शैडो किया जा सकता है:
मेरा प्रोजेक्ट/वर्कस्पेस
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
सिस्टम
प्रॉपर्टी के लिए सबमिट किया गया है.
खास तौर पर:
--host_jvm_args=-Djava.net.preferIPv6Addresses=true
स्टार्टअप का इस्तेमाल करना विकल्प का इस्तेमाल किया जा सकता है, उदाहरण के लिए, आपकी.bazelrc
फ़ाइल में निम्न पंक्ति:startup --host_jvm_args=-Djava.net.preferIPv6Addresses=true
जब Java बिल्ड टारगेट चला रहा हो, जिसे इंटरनेट से कनेक्ट करने की ज़रूरत हो (जैसे जैसे, इंटिग्रेशन टेस्ट में करना हो), तो
--jvmopt=-Djava.net.preferIPv6Addresses=true
टूल फ़्लैग करें. उदाहरण के लिए, अपने.bazelrc
में शामिल करें फ़ाइल:build --jvmopt=-Djava.net.preferIPv6Addresses
अगर
rules_jvm_external
का इस्तेमाल किया जा रहा हो डिपेंडेंसी वर्शन रिज़ॉल्यूशन के लिए, इसे भी जोड़ें-Djava.net.preferIPv6Addresses=true
सेCOURSIER_OPTS
एनवायरमेंट के लिए वैरिएबल को JVM विकल्प उपलब्ध कराने के लिए कोर्सियर.
ऑफ़लाइन बिल्ड
कभी-कभी हो सकता है कि आप बिल्ड को ऑफ़लाइन चलाना चाहें, जैसे कि
हवाई जहाज़. ऐसे आसान इस्तेमाल के लिए, डेटा स्टोर करने की ज़रूरी जगहों को प्रीफ़ेच करें
bazel fetch
या bazel sync
. के दौरान और डेटा संग्रह स्थान फ़ेच करने को अक्षम करने के लिए
बिल्ड के लिए, --nofetch
विकल्प का इस्तेमाल करें.
असल ऑफ़लाइन बिल्ड के लिए, जहां एक अलग इकाई सभी ज़रूरी फ़ाइलें उपलब्ध कराती है,
Basel का विकल्प, --distdir
विकल्प के साथ काम करता है. यह फ़्लैग बेज़ल को पहली बार इन चीज़ों की जांच करने के लिए कहता है
जब रिपॉज़िटरी नियम बेज़ेल को कहता है कि
ctx.download
से कोई फ़ाइल फ़ेच करें या
ctx.download_and_extract
. इन्होंने बदलाव किया है
ज़रूरी फ़ाइल का हैश योग देते हुए, Baze,
पहले यूआरएल का बेस नेम. साथ ही, हैश मैच होने पर लोकल कॉपी का इस्तेमाल करता है.
बेज़ल इस तकनीक का इस्तेमाल करके, डिस्ट्रिब्यूशन से ऑफ़लाइन बूटस्ट्रैप करते हैं
आर्टफ़ैक्ट है.
ऐसा करने के लिए, यह सभी ज़रूरी बाहरी तरीकों को इकट्ठा करता है
डिपेंडेंसी
एक इंटरनल
distdir_tar
.
Baज़ल, बिना जानकारी के रिपॉज़िटरी के नियमों में आर्बिट्रेरी कमांड इस्तेमाल करने की अनुमति देता है अगर वे नेटवर्क से संपर्क करते हैं, और इसलिए वे पूरी तरह से ऑफ़लाइन बिल्ड लागू नहीं कर सकते. यहां की यात्रा पर हूं जांचें कि कोई बिल्ड ऑफ़लाइन ठीक से काम कर रहा है या नहीं, फिर मैन्युअल रूप से नेटवर्क को ब्लॉक करें (जैसा कि Basel अपने बूटस्ट्रैप में करता है परीक्षण).