ทรัพยากร Dependency ที่ซ่อนอยู่ใน WORKSPACE
โปรดใช้นโยบายเวอร์ชันเดียวในโปรเจ็กต์ทุกครั้งที่เป็นไปได้ ซึ่งจำเป็นสำหรับ Dependency ที่คุณคอมไพล์และรวมไว้ในไบนารีสุดท้าย สำหรับในกรณีอื่นๆ คุณอาจทำตามและสังเกตพึ่งพิงต่างๆ ได้ ดังนี้
โปรเจ็กต์ของฉัน/พื้นที่ทำงาน
workspace(name = "myproject")
local_repository(
name = "A",
path = "../A",
)
local_repository(
name = "B",
path = "../B",
)
พื้นที่ทำงาน
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 = "..."
)
ทั้งทรัพยากร Dependency A
และ B
อิงตาม testrunner
เวอร์ชันที่แตกต่างกัน
รวมทั้ง 2 อย่างใน 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
มีทรัพยากร Dependency เดียวกันแต่เรียกใช้ด้วยชื่ออื่น ให้ผนวกทรัพยากร Dependency เหล่านั้นใน myproject/WORKSPACE
การลบล้างที่เก็บจากบรรทัดคำสั่ง
หากต้องการลบล้างที่เก็บข้อมูลที่ประกาศไว้ด้วยที่เก็บข้อมูลในเครื่องจากบรรทัดคำสั่ง ให้ใช้ Flag --override_repository
การใช้แฟล็กนี้จะเปลี่ยนแปลงเนื้อหาของที่เก็บภายนอกโดยไม่เปลี่ยนซอร์สโค้ด
เช่น หากต้องการลบล้าง @foo
ไปยังไดเรกทอรีในเครื่อง /path/to/local/foo
ให้ส่งแฟล็ก --override_repository=foo=/path/to/local/foo
กรณีการใช้งานมีดังนี้
- ปัญหาการแก้ไขข้อบกพร่อง เช่น การลบล้างที่เก็บ
http_archive
ไปยังไดเรกทอรีในเครื่องที่คุณทำการเปลี่ยนแปลงได้ง่ายขึ้น - เวนเดอร์ริง หากคุณอยู่ในสภาพแวดล้อมที่ไม่สามารถเรียกใช้เครือข่าย ให้ลบล้างกฎที่เก็บข้อมูลที่อิงตามเครือข่ายเพื่อชี้ไปยังไดเรกทอรีในเครื่องแทน
การใช้พร็อกซี
Bazel จะรับที่อยู่พร็อกซีจากตัวแปรสภาพแวดล้อม HTTPS_PROXY
และ HTTP_PROXY
แล้วใช้ที่อยู่เหล่านี้เพื่อดาวน์โหลดไฟล์ HTTP
และ HTTPS
(หากระบุไว้)
รองรับ IPv6
Bazel จะดาวน์โหลดทรัพยากร Dependency ได้โดยไม่มีการเปลี่ยนแปลงในเครื่องที่ใช้ IPv6 เท่านั้น อย่างไรก็ตาม สำหรับเครื่อง IPv4/IPv6 แบบ 2 สแต็ก Bazel ใช้รูปแบบเดียวกันกับ Java โดยแนะนำให้ใช้ IPv4 หากเปิดใช้ ในบางสถานการณ์ ตัวอย่างเช่น เมื่อเครือข่าย IPv4 แก้ไข/เข้าถึงที่อยู่ภายนอกไม่ได้ อาจทำให้เกิดข้อยกเว้น Network
unreachable
รายการและบิลด์ล้มเหลว ในกรณีเหล่านี้ คุณสามารถลบล้างลักษณะการทํางานของ Bazel เพื่อเลือกใช้ 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
flag ของเครื่องมือ เช่น ใส่ข้อมูลต่อไปนี้ใน.bazelrc
ไฟล์build --jvmopt=-Djava.net.preferIPv6Addresses
หากคุณใช้
rules_jvm_external
ในการแก้ไขเวอร์ชันของข้อกําหนด ให้เพิ่ม-Djava.net.preferIPv6Addresses=true
ลงในตัวแปรสภาพแวดล้อมCOURSIER_OPTS
ด้วยเพื่อระบุตัวเลือก JVM สําหรับ Coursier
บิลด์แบบออฟไลน์
บางครั้งคุณอาจต้องการสร้างบิลด์แบบออฟไลน์ เช่น เมื่อเดินทางบนเครื่องบิน สําหรับกรณีการใช้งานที่ง่ายเช่นนี้ ให้โหลดที่เก็บข้อมูลที่จําเป็นล่วงหน้าด้วย bazel fetch
หรือ bazel sync
หากต้องการปิดใช้การดึงข้อมูลที่เก็บเพิ่มเติมระหว่างบิลด์ ให้ใช้ตัวเลือก --nofetch
สำหรับบิลด์ออฟไลน์ที่แท้จริงที่เอนทิตีอื่นจัดเตรียมไฟล์ที่จำเป็นทั้งหมด
Bazel รองรับตัวเลือก --distdir
Flag นี้จะบอกให้ Bazel มองหาในไดเรกทอรีที่ระบุโดยตัวเลือกนั้นก่อน เมื่อกฎที่เก็บข้อมูลขอให้ Bazel ดึงข้อมูลไฟล์ที่มี ctx.download
หรือ ctx.download_and_extract
โดยการระบุแฮชผลรวมของไฟล์ที่ต้องการ Bazel จะค้นหาไฟล์ที่ตรงกับชื่อฐานของ URL แรก และใช้สำเนาในเครื่องหากแฮชตรงกัน
Bazel เองก็ใช้เทคนิคนี้เพื่อเปิดเครื่องแบบออฟไลน์จากอาร์ติแฟกต์การกระจาย
โดยรวบรวมข้อกำหนดภายนอกที่จำเป็นทั้งหมดไว้ในdistdir_tar
ภายใน
Bazel อนุญาตการดำเนินการตามคำสั่งที่กำหนดเองในกฎที่เก็บโดยไม่ทราบว่าเรียกใช้เครือข่ายหรือไม่ จึงไม่สามารถบังคับใช้บิลด์แบบออฟไลน์โดยสมบูรณ์ได้ หากต้องการทดสอบว่าบิลด์ทำงานแบบออฟไลน์ได้อย่างถูกต้องหรือไม่ ให้บล็อกเครือข่ายด้วยตนเอง (อย่างที่ Bazel ทำในการทดสอบ Bootstrap)