การแก้ไขทรัพยากร Dependency ใน WORKSPACE
หากเป็นไปได้ ให้ใช้นโยบายเวอร์ชันเดียวในโปรเจ็กต์ ที่จำเป็นสำหรับทรัพยากร Dependency ที่คุณคอมไพล์และนำไปสุดท้าย 2. สำหรับในกรณีอื่นๆ คุณอาจทำตามและสังเกตพึ่งพิงต่างๆ ได้ ดังนี้
โปรเจ็กต์ของฉัน/พื้นที่ทำงาน
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(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
เวอร์ชันที่แตกต่างกัน
รวมทั้งสองประเภทใน 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
การลบล้างที่เก็บจากบรรทัดคำสั่ง
หากต้องการลบล้างที่เก็บที่ประกาศด้วยที่เก็บในเครื่องจากบรรทัดคำสั่ง
ให้ใช้
--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
file:build --jvmopt=-Djava.net.preferIPv6Addresses
หากคุณกำลังใช้
rules_jvm_external
สำหรับความละเอียดของเวอร์ชันทรัพยากร Dependency ให้เพิ่ม-Djava.net.preferIPv6Addresses=true
ไปยังสภาพแวดล้อมCOURSIER_OPTS
ตัวแปรที่จะระบุตัวเลือก JVM สำหรับ Coursier
บิลด์แบบออฟไลน์
บางครั้งคุณอาจต้องการเรียกใช้บิลด์แบบออฟไลน์ เช่น เมื่อเดินทางใน
เครื่องบิน สำหรับกรณีการใช้งานง่ายๆ ดังกล่าว ให้ดึงข้อมูลที่เก็บที่จำเป็นล่วงหน้าด้วย
bazel fetch
หรือ bazel sync
หากต้องการปิดใช้การดึงข้อมูลที่เก็บเพิ่มเติมระหว่าง
บิลด์ ใช้ตัวเลือก --nofetch
สำหรับบิลด์ที่แท้จริงแบบออฟไลน์ ซึ่งเอนทิตีอื่นๆ จะจัดหาไฟล์ที่จำเป็นทั้งหมด
Bazel รองรับตัวเลือก --distdir
ธงนี้จะบอกให้ Bazel ตรวจดูก่อน
ไดเรกทอรีที่ระบุโดยตัวเลือกนั้นเมื่อกฎที่เก็บขอให้ Bazel
เรียกไฟล์ด้วย ctx.download
หรือ
ctx.download_and_extract
โดย
ระบุแฮชผลรวมของไฟล์ที่ต้องการ Bazel จะค้นหาไฟล์ที่ตรงกับ
ชื่อฐานของ URL แรก และใช้สำเนาในเครื่องหากแฮชตรงกัน
Bazel เองก็ใช้เทคนิคนี้เพื่อกระตุ้นให้ทำงานแบบออฟไลน์จากการกระจาย
อาร์ติแฟกต์
แต่ทําโดยรวบรวมข้อมูลภายนอกที่จําเป็นทั้งหมด
ทรัพยากร Dependency
ภายใน
distdir_tar
Bazel อนุญาตการดำเนินการตามคำสั่งที่กำหนดเองในกฎที่เก็บโดยไม่ทราบว่า หากมีการเรียกไปยังเครือข่าย และไม่สามารถบังคับใช้บิลด์แบบออฟไลน์โดยสมบูรณ์ได้ ถึง ทดสอบว่าบิลด์ทำงานแบบออฟไลน์ได้อย่างถูกต้องหรือไม่ ให้ทำการบล็อกเครือข่ายด้วยตนเอง (เนื่องจาก Bazel เต้นบู๊ตต่ำสุด ทดสอบ)