โหลดฟังก์ชันต่อไปนี้ได้จาก @bazel_tools//tools/build_defs/repo:http.bzl
กฎสําหรับการดาวน์โหลดไฟล์และที่เก็บถาวรผ่าน HTTP
ตั้งค่า
หากต้องการใช้กฎเหล่านี้ ให้โหลดกฎในไฟล์ WORKSPACE
ดังนี้
load(
"@bazel_tools//tools/build_defs/repo:http.bzl",
"http_archive",
"http_file",
"http_jar",
)
กฎเหล่านี้เป็นกฎ http เนทีฟเวอร์ชันปรับปรุงและจะแทนที่กฎเนทีฟในที่สุด
http_archive
http_archive(name, add_prefix, auth_patterns, build_file, build_file_content, canonical_id, integrity, netrc, patch_args, patch_cmds, patch_cmds_win, patch_tool, patches, remote_file_integrity, remote_file_urls, remote_patch_strip, remote_patches, repo_mapping, sha256, strip_prefix, type, url, urls, workspace_file, workspace_file_content)
ดาวน์โหลดที่เก็บ Bazel เป็นไฟล์ที่เก็บถาวรที่บีบอัด ทำการบีบอัดออก และทำให้เป้าหมายพร้อมใช้งานสำหรับการเชื่อมโยง
โดยรองรับนามสกุลไฟล์ "zip"
, "jar"
, "war"
, "aar"
, "tar"
,
"tar.gz"
, "tgz"
, "tar.xz"
, "txz"
, "tar.zst"
, "tzst"
, tar.bz2
, "ar"
หรือ "deb"
ตัวอย่าง:
สมมติว่าที่เก็บปัจจุบันมีซอร์สโค้ดสำหรับโปรแกรมแชทซึ่งรูทอยู่ที่ไดเรกทอรี ~/chat-app
โดยต้องอาศัยไลบรารี SSL ซึ่งมีอยู่จาก http://example.com/openssl.zip ไฟล์ .zip
นี้มีโครงสร้างไดเรกทอรีดังต่อไปนี้
WORKSPACE
src/
openssl.cc
openssl.h
ในที่เก็บข้อมูลในเครื่อง ผู้ใช้สร้างไฟล์ openssl.BUILD
ซึ่งมีคำจำกัดความเป้าหมายดังต่อไปนี้
cc_library(
name = "openssl-lib",
srcs = ["src/openssl.cc"],
hdrs = ["src/openssl.h"],
)
เป้าหมายในที่เก็บข้อมูล ~/chat-app
จะขึ้นอยู่กับเป้าหมายนี้หากมีการเพิ่มบรรทัดต่อไปนี้ลงใน ~/chat-app/WORKSPACE
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "my_ssl",
url = "http://example.com/openssl.zip",
sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
build_file = "@//:openssl.BUILD",
)
เป้าหมายจะระบุ @my_ssl//:openssl-lib
เป็นทรัพยากร Dependency
Attributes
name |
ชื่อ ต้องระบุ
ชื่อที่ไม่ซ้ำกันสำหรับที่เก็บนี้ |
add_prefix |
สตริง ไม่บังคับ
ไดเรกทอรีปลายทางที่สัมพันธ์กับไดเรกทอรีที่เก็บ ระบบจะคลายการแพคข้อมูลที่เก็บถาวรลงในไดเรกทอรีนี้หลังจากใช้ "strip_prefix" (หากมี) กับเส้นทางไฟล์ภายในที่เก็บถาวร เช่น ระบบจะแตกไฟล์ `foo-1.2.3/src/foo.h` เป็น `bar/src/foo.h` หาก `add_prefix = "bar"` และ `strip_prefix = "foo-1.2.3"` |
auth_patterns |
Dictionary: String -> String ไม่บังคับ
Dict ที่ไม่บังคับซึ่งจับคู่ชื่อโฮสต์กับรูปแบบการให้สิทธิ์ที่กำหนดเอง
หากมีชื่อโฮสต์ของ URL ในคำสั่งนี้ ระบบจะใช้ค่านี้เป็นรูปแบบเมื่อสร้างส่วนหัวการให้สิทธิ์สำหรับคำขอ HTTP ซึ่งทำให้สามารถใช้รูปแบบการให้สิทธิ์ที่กำหนดเองซึ่งใช้ในผู้ให้บริการพื้นที่เก็บข้อมูลระบบคลาวด์ทั่วไปหลายราย
รูปแบบปัจจุบันรองรับโทเค็น 2 รายการ ได้แก่ auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" } machine storage.cloudprovider.com password RANDOM-TOKEN Authorization: Bearer RANDOM-TOKEN |
build_file |
ป้ายกำกับ ไม่บังคับ
ไฟล์ที่จะใช้เป็นไฟล์ BUILD สําหรับที่เก็บข้อมูลนี้ แอตทริบิวต์นี้เป็นป้ายกำกับแบบสัมบูรณ์ (ใช้ "@//" สําหรับที่เก็บข้อมูลหลัก) ไฟล์ไม่จำเป็นต้องมีชื่อว่า BUILD แต่อาจเป็นชื่ออื่นก็ได้ (เช่น BUILD.new-repo-name อาจเป็นชื่อที่เหมาะในการแยกความแตกต่างจากไฟล์ BUILD จริงของที่เก็บ คุณสามารถระบุ build_file หรือ build_file_content อย่างใดอย่างหนึ่งเท่านั้น |
build_file_content |
สตริง ไม่บังคับ
เนื้อหาสำหรับไฟล์ BUILD ของที่เก็บนี้ คุณสามารถระบุ build_file หรือ build_file_content อย่างใดอย่างหนึ่งเท่านั้น |
canonical_id |
สตริง ไม่บังคับ
รหัสแคนอนนิกของไฟล์ที่ดาวน์โหลด หากระบุและไม่ได้ว่างเปล่า Bazel จะไม่นำไฟล์จากแคช เว้นแต่จะมีการเพิ่มไฟล์ลงในแคชโดยคำขอที่มีรหัส Canonical เดียวกัน หากไม่ได้ระบุหรือว่างเปล่า Bazel จะใช้ URL ของไฟล์เป็นรหัสแคนนอนิกโดยค่าเริ่มต้น วิธีนี้จะช่วยจับข้อผิดพลาดที่พบบ่อยในการอัปเดต URL โดยไม่อัปเดตแฮชด้วย ซึ่งส่งผลให้บิลด์สําเร็จในเครื่อง แต่ล้มเหลวในเครื่องที่ไม่มีไฟล์ในแคช คุณปิดใช้ลักษณะการทำงานนี้ได้โดยใช้ตัวเลือก --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0 |
integrity |
สตริง ไม่บังคับ
checksum ที่คาดไว้ในรูปแบบความสมบูรณ์ของทรัพยากรย่อยของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับการตรวจสอบผลรวมของไฟล์ที่ดาวน์โหลด _การละเว้นการตรวจสอบข้อผิดพลาดนั้นมีความเสี่ยงด้านความปลอดภัยเนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้งานสร้างแบบไม่อยู่ภายใต้เงื่อนไข คุณเลือกที่จะใช้หรือไม่ก็ได้เพื่อให้การพัฒนาง่ายขึ้น แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ "sha256" ก่อนเผยแพร่ |
netrc |
สตริง ไม่บังคับ
ตำแหน่งของไฟล์ .netrc ที่จะใช้สำหรับการตรวจสอบสิทธิ์ |
patch_args |
รายการสตริง (ไม่บังคับ)
อาร์กิวเมนต์ที่ส่งไปยังเครื่องมือแพตช์ ค่าเริ่มต้นคือ -p0 แต่โดยปกติแล้วคุณจะต้องใส่ -p1 สำหรับแพตช์ที่ git สร้างขึ้น หากระบุอาร์กิวเมนต์ -p หลายรายการ อาร์กิวเมนต์สุดท้ายจะมีผล หากระบุอาร์กิวเมนต์อื่นที่ไม่ใช่ -p ไว้ Bazel จะกลับไปใช้เครื่องมือบรรทัดคำสั่งแพตช์แทนการใช้งานแพตช์ของ Bazel เมื่อใช้เครื่องมือบรรทัดคำสั่งการปะติดปะต่อสำรองและไม่ระบุแอตทริบิวต์ patch_tool ระบบจะใช้ "patch" การดำเนินการนี้จะมีผลกับไฟล์แพตช์ในแอตทริบิวต์ "patches" เท่านั้น |
patch_cmds |
รายการสตริง (ไม่บังคับ)
ลำดับคำสั่ง Bash ที่จะใช้ใน Linux/Macos หลังจากติดตั้งแพตช์แล้ว |
patch_cmds_win |
รายการสตริง (ไม่บังคับ)
ลำดับคำสั่ง PowerShell ที่จะใช้ใน Windows หลังจากติดตั้งแพตช์แล้ว หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ระบบจะเรียกใช้ patch_cmds ใน Windows ซึ่งต้องมีไฟล์ Bash อยู่ |
patch_tool |
สตริง ไม่บังคับ
ยูทิลิตีการแก้ไข(1) ที่จะใช้ หากระบุไว้ Bazel จะใช้เครื่องมือแพตช์ที่ระบุแทนการติดตั้งใช้งานแพตช์ของ Bazel เนทีฟ |
patches |
รายการป้ายกำกับ ไม่บังคับ
รายการไฟล์ที่จะใช้เป็นแพตช์หลังจากแตกไฟล์เก็บถาวร โดยค่าเริ่มต้นจะใช้การติดตั้งใช้งานการปะติดปะต่อแบบดั้งเดิมของ Bazel ซึ่งไม่รองรับการจับคู่แบบไม่เจาะจงและแพตช์แบบไบนารี แต่ Bazel จะเปลี่ยนไปใช้เครื่องมือบรรทัดคำสั่งการปะติดปะต่อหากระบุแอตทริบิวต์ `patch_tool` หรือมีอาร์กิวเมนต์อื่นนอกเหนือจาก `-p` ในแอตทริบิวต์ `patch_args` |
remote_file_integrity |
Dictionary: String -> String ไม่บังคับ
การแมปเส้นทางแบบสัมพัทธ์ของไฟล์ (คีย์) กับค่าความสมบูรณ์ (ค่า) เส้นทางแบบสัมพัทธ์เหล่านี้ควรแมปกับไฟล์ (คีย์) ในแอตทริบิวต์ `remote_file_urls` |
remote_file_urls |
พจนานุกรม: สตริง -> รายการสตริง ไม่บังคับ
การแมปเส้นทางสัมพัทธ์ (คีย์) กับรายการ URL (ค่า) ที่จะดาวน์โหลดและทำให้พร้อมใช้งานเป็นไฟล์ที่วางซ้อนกันในที่เก็บ ซึ่งมีประโยชน์เมื่อคุณต้องการเพิ่มไฟล์ WORKSPACE หรือ BUILD.bazel บนที่เก็บที่มีอยู่ ระบบจะดาวน์โหลดไฟล์ก่อนที่จะใช้แพตช์ในแอตทริบิวต์ "patches" และรายการ URL ทั้งหมดควรเป็นมิเรอร์ของไฟล์เดียวกัน ระบบจะลองใช้ URL ตามลําดับจนกว่าจะพบ URL ที่ใช้งานได้ |
remote_patch_strip |
จำนวนเต็ม (ไม่บังคับ)
จำนวนสแลชนำหน้าที่จะนำออกจากชื่อไฟล์ในแพตช์ระยะไกล |
remote_patches |
Dictionary: String -> String ไม่บังคับ
การแมป URL ของไฟล์แพตช์กับค่าความสมบูรณ์ ซึ่งจะใช้หลังจากแตกไฟล์เก็บถาวรและก่อนใช้ไฟล์แพตช์จากแอตทริบิวต์ "patches" โดยใช้การติดตั้งใช้งานแพตช์ Bazel เนทีฟ คุณระบุหมายเลขแถบแพตช์ได้ด้วย "remote_patch_strip" |
repo_mapping |
Dictionary: String -> String; ต้องระบุ
พจนานุกรมจากชื่อที่เก็บในเครื่องเป็นชื่อที่เก็บส่วนกลาง ซึ่งช่วยให้ควบคุมการแก้ไขข้อกำหนดของพื้นที่ทำงานสำหรับข้อกำหนดของที่เก็บข้อมูลนี้ได้ ตัวอย่างเช่น รายการ `"@foo": "@bar"` ประกาศว่าเมื่อใดก็ตามที่ที่เก็บข้อมูลนี้ใช้@foo (เช่น ใช้@foo//some:target) ก็ควรแก้ไขการพึ่งพานั้นภายใน@bar ที่ประกาศไว้ทั่วโลก ("@bar//some:target") |
sha256 |
สตริง ไม่บังคับ
SHA-256 ที่คาดไว้ของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ SHA-256 ของไฟล์ที่ดาวน์โหลด _การละเว้น SHA-256 เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่ทำงาน คุณเลือกใช้แอตทริบิวต์นี้หรือไม่ก็ได้เพื่อให้การพัฒนาง่ายขึ้น แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ "integrity" ก่อนเผยแพร่ |
strip_prefix |
สตริง ไม่บังคับ
คำนำหน้าไดเรกทอรีที่จะตัดออกจากไฟล์ที่แยก ที่เก็บถาวรจำนวนมากมีไดเรกทอรีระดับบนสุดที่มีไฟล์ที่มีประโยชน์ทั้งหมดในที่เก็บถาวร แทนที่จะต้องระบุคำนำหน้านี้ซ้ำๆ ใน `build_file` คุณสามารถใช้ฟิลด์นี้เพื่อนำคำนำหน้าออกจากไฟล์ที่ดึงข้อมูลทั้งหมดได้ ตัวอย่างเช่น สมมติว่าคุณใช้ไดเรกทอรี "foo-lib-latest.zip" ซึ่งมีไดเรกทอรี "foo-lib-1.2.3/" ใต้ที่มีไฟล์ `WORKSPACE" และไดเรกทอรี `src/`, `lib/` และ `test/` ซึ่งมีโค้ดจริงที่คุณต้องการสร้าง ระบุ `strip_prefix = "foo-lib-1.2.3"` เพื่อใช้ไดเรกทอรี `foo-lib-1.2.3` เป็นไดเรกทอรีระดับบนสุด โปรดทราบว่าหากมีไฟล์อยู่นอกไดเรกทอรีนี้ ระบบจะทิ้งไฟล์เหล่านั้นและเข้าถึงไม่ได้ (เช่น ไฟล์ใบอนุญาตระดับบนสุด) ซึ่งรวมถึงไฟล์/ไดเรกทอรีที่เริ่มต้นด้วยคำนำหน้าแต่ไม่อยู่ในไดเรกทอรี (เช่น `foo-lib-1.2.3.release-notes`) หากคำนำหน้าที่คุณระบุไม่ตรงกับไดเรกทอรีในไฟล์เก็บถาวร Bazel จะแสดงข้อผิดพลาด |
type |
สตริง ไม่บังคับ
ประเภทที่เก็บถาวรของไฟล์ที่ดาวน์โหลด โดยค่าเริ่มต้น ระบบจะกำหนดประเภทไฟล์เก็บถาวรจากนามสกุลไฟล์ของ URL หากไฟล์ไม่มีนามสกุล คุณสามารถระบุอย่างชัดแจ้งได้ดังนี้ `"zip"`, `"jar"`, `"war"`, `"aar"`, `"tar"`, `"tar.gz"`, `"tgz"`, `"tar.xz"`, `"txz"`, `"tar.zst"`, `"tzst"`, `"tar.bz2"`, `"ar"`, หรือ `"deb"` |
url |
สตริง ไม่บังคับ
URL ของไฟล์ที่จะทําให้ Bazel พร้อมใช้งาน ต้องเป็นไฟล์หรือ URL แบบ http หรือ https มีการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ คุณเพิ่มความยืดหยุ่นได้โดยใช้พารามิเตอร์ urls ที่อนุญาตให้ระบุ URL อื่นที่จะดึงข้อมูล |
urls |
รายการสตริง (ไม่บังคับ)
รายการ URL ของไฟล์ที่จะทําให้ Bazel ใช้งานได้ แต่ละรายการต้องเป็นไฟล์หรือ URL ของ http หรือ https ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะลองใช้ URL ตามลำดับจนกว่าจะพบ URL ที่ใช้งานได้ คุณจึงควรระบุมิเรอร์ในเครื่องก่อน หากการดาวน์โหลดทั้งหมดไม่สำเร็จ กฎก็จะไม่สำเร็จ |
workspace_file |
ป้ายกํากับ (ไม่บังคับ)
ไฟล์ที่จะใช้เป็นไฟล์ `WORKSPACE` สําหรับที่เก็บข้อมูลนี้ ต้องระบุ "workspace_file" หรือ "workspace_file_content" หรือจะระบุทั้ง 2 รายการไม่ได้ |
workspace_file_content |
สตริง ไม่บังคับ
เนื้อหาของไฟล์ WORKSPACE สำหรับที่เก็บนี้ คุณสามารถระบุ "workspace_file" หรือ "workspace_file_content" อย่างใดอย่างหนึ่ง หรือจะระบุทั้ง 2 อย่างก็ได้ |
http_file
http_file(name, auth_patterns, canonical_id, downloaded_file_path, executable, integrity, netrc, repo_mapping, sha256, url, urls)
ดาวน์โหลดไฟล์จาก URL และทำให้ใช้เป็นกลุ่มไฟล์ได้
ตัวอย่าง สมมติว่าคุณต้องมีพാക്കเกจ debian สําหรับกฎที่กําหนดเอง แพ็กเกจนี้รับได้จาก http://example.com/package.deb จากนั้นคุณจะเพิ่มลงในไฟล์ WORKSPACE ได้โดยทำดังนี้
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
http_file(
name = "my_deb",
url = "http://example.com/package.deb",
sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
)
เป้าหมายจะระบุ @my_deb//file
เป็นส่วนที่ต้องพึ่งพาไฟล์นี้
Attributes
name |
ชื่อ ต้องระบุ
ชื่อที่ไม่ซ้ำกันสำหรับที่เก็บนี้ |
auth_patterns |
Dictionary: String -> String ไม่บังคับ
Dict ที่ไม่บังคับซึ่งจับคู่ชื่อโฮสต์กับรูปแบบการให้สิทธิ์ที่กำหนดเอง
หากมีชื่อโฮสต์ของ URL ในพจนานุกรมนี้ ระบบจะใช้ค่าดังกล่าวเป็นรูปแบบเมื่อสร้างส่วนหัวการให้สิทธิ์สําหรับคําขอ HTTP ซึ่งทำให้สามารถใช้รูปแบบการให้สิทธิ์ที่กำหนดเองซึ่งใช้ในผู้ให้บริการพื้นที่เก็บข้อมูลระบบคลาวด์ทั่วไปหลายราย
ปัจจุบันรูปแบบรองรับโทเค็น 2 รายการ ได้แก่ auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" } machine storage.cloudprovider.com password RANDOM-TOKEN Authorization: Bearer RANDOM-TOKEN |
canonical_id |
สตริง ไม่บังคับ
รหัสแคนอนนิกของไฟล์ที่ดาวน์โหลด หากระบุและไม่ได้ว่างเปล่า Bazel จะไม่นำไฟล์จากแคช เว้นแต่จะมีการเพิ่มไฟล์ลงในแคชโดยคำขอที่มีรหัส Canonical เดียวกัน หากไม่ได้ระบุหรือว่างเปล่า Bazel จะใช้ URL ของไฟล์เป็นรหัสแคนนอนิกโดยค่าเริ่มต้น วิธีนี้จะช่วยจับข้อผิดพลาดที่พบบ่อยในการอัปเดต URL โดยไม่อัปเดตแฮชด้วย ซึ่งส่งผลให้บิลด์สําเร็จในเครื่อง แต่ล้มเหลวในเครื่องที่ไม่มีไฟล์ในแคช คุณปิดใช้ลักษณะการทำงานนี้ได้โดยใช้ตัวเลือก --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0 |
downloaded_file_path |
สตริง ไม่บังคับ
เส้นทางที่กำหนดให้กับไฟล์ที่ดาวน์โหลด |
executable |
บูลีน ไม่บังคับ
ไฟล์ที่ดาวน์โหลดมาควรเป็นไฟล์ปฏิบัติการหรือไม่ |
integrity |
สตริง ไม่บังคับ
checksum ที่คาดไว้ในรูปแบบความสมบูรณ์ของทรัพยากรย่อยของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับการตรวจสอบผลรวมของไฟล์ที่ดาวน์โหลด _การละเว้นการตรวจสอบข้อผิดพลาดนั้นมีความเสี่ยงด้านความปลอดภัยเนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้งานสร้างแบบไม่อยู่ภายใต้เงื่อนไข คุณเลือกที่จะใช้หรือไม่ก็ได้เพื่อให้การพัฒนาง่ายขึ้น แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ "sha256" ก่อนเผยแพร่ |
netrc |
สตริง ไม่บังคับ
ตำแหน่งของไฟล์ .netrc ที่จะใช้สำหรับการตรวจสอบสิทธิ์ |
repo_mapping |
Dictionary: String -> String; ต้องระบุ
พจนานุกรมจากชื่อที่เก็บในเครื่องเป็นชื่อที่เก็บส่วนกลาง การดำเนินการนี้ช่วยให้ควบคุมความละเอียดของทรัพยากร Dependency ของที่เก็บนี้ได้ ตัวอย่างเช่น รายการ `"@foo": "@bar"` ประกาศว่าเมื่อใดก็ตามที่ที่เก็บข้อมูลนี้ใช้@foo (เช่น ใช้@foo//some:target) ก็ควรแก้ไขการพึ่งพานั้นภายใน@bar ที่ประกาศไว้ทั่วโลก ("@bar//some:target") |
sha256 |
สตริง ไม่บังคับ
SHA-256 ที่คาดไว้ของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ SHA-256 ของไฟล์ที่ดาวน์โหลด _การละเว้น SHA-256 เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่ทำงาน ไม่จำเป็นต้องทำให้การพัฒนาง่ายขึ้น แต่ควรตั้งค่าก่อนที่จะจัดส่ง |
url |
สตริง ไม่บังคับ
URL ของไฟล์ที่จะทําให้ Bazel พร้อมใช้งาน ต้องเป็นไฟล์หรือ URL แบบ http หรือ https มีการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ คุณเพิ่มความยืดหยุ่นได้โดยใช้พารามิเตอร์ urls ที่อนุญาตให้ระบุ URL อื่นที่จะดึงข้อมูล |
urls |
รายการสตริง (ไม่บังคับ)
รายการ URL ไปยังไฟล์ที่จะทำให้ Bazel ใช้งานได้ แต่ละรายการต้องเป็นไฟล์หรือ URL ของ http หรือ https มีการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะลองใช้ URL ตามลำดับจนกว่าจะพบ URL ที่ใช้งานได้ คุณจึงควรระบุมิเรอร์ในเครื่องก่อน หากดาวน์โหลดทั้งหมดไม่สำเร็จ กฎก็จะล้มเหลว |
http_jar
http_jar(name, auth_patterns, canonical_id, downloaded_file_name, integrity, netrc, repo_mapping, sha256, url, urls)
ดาวน์โหลดไฟล์ jar จาก URL และทำให้พร้อมใช้งานเป็น java_import
ไฟล์ที่ดาวน์โหลดต้องมีนามสกุล .jar
ตัวอย่าง:
สมมติว่าที่เก็บปัจจุบันมีซอร์สโค้ดของโปรแกรมแชทที่รูทอยู่ที่ไดเรกทอรี ~/chat-app
โดยต้องใช้ไลบรารี SSL ที่มีให้ใช้งานจาก http://example.com/openssl-0.2.jar
เป้าหมายในที่เก็บข้อมูล ~/chat-app
จะขึ้นอยู่กับเป้าหมายนี้หากมีการเพิ่มบรรทัดต่อไปนี้ลงใน ~/chat-app/WORKSPACE
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_jar")
http_jar(
name = "my_ssl",
url = "http://example.com/openssl-0.2.jar",
sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
)
เป้าหมายจะระบุ @my_ssl//jar
เป็นการพึ่งพาเพื่อใช้ Jar นี้
นอกจากนี้ คุณยังอ้างอิงไฟล์ในระบบปัจจุบัน (localhost) โดยใช้ "file:///path/to/file" ได้หากใช้ระบบที่ใช้ Unix หากใช้ Windows ให้ใช้ "file:///c:/path/to/file" ในตัวอย่างนี้ทั้ง 2 ตัวอย่าง โปรดสังเกตเครื่องหมายทับ 3 ตัว (/
) โดยเครื่องหมายทับ 2 ตัวแรกเป็นของ file://
และเครื่องหมายทับตัวที่ 3 เป็นของเส้นทางแบบสัมบูรณ์ไปยังไฟล์
Attributes
name |
ชื่อ ต้องระบุ
ชื่อที่ไม่ซ้ำกันสำหรับที่เก็บนี้ |
auth_patterns |
Dictionary: String -> String ไม่บังคับ
Dict ที่ไม่บังคับซึ่งจับคู่ชื่อโฮสต์กับรูปแบบการให้สิทธิ์ที่กำหนดเอง
หากมีชื่อโฮสต์ของ URL ในพจนานุกรมนี้ ระบบจะใช้ค่าดังกล่าวเป็นรูปแบบเมื่อสร้างส่วนหัวการให้สิทธิ์สําหรับคําขอ HTTP ซึ่งทำให้สามารถใช้รูปแบบการให้สิทธิ์ที่กำหนดเองซึ่งใช้ในผู้ให้บริการพื้นที่เก็บข้อมูลระบบคลาวด์ทั่วไปหลายราย
ปัจจุบันรูปแบบรองรับโทเค็น 2 รายการ ได้แก่ auth_patterns = { "storage.cloudprovider.com": "Bearer <password>" } machine storage.cloudprovider.com password RANDOM-TOKEN Authorization: Bearer RANDOM-TOKEN |
canonical_id |
สตริง ไม่บังคับ
รหัสแคนอนนิกของไฟล์ที่ดาวน์โหลด หากระบุและไม่ได้ว่างเปล่า Bazel จะไม่นำไฟล์จากแคช เว้นแต่จะมีการเพิ่มไฟล์ลงในแคชโดยคำขอที่มีรหัส Canonical เดียวกัน หากไม่ได้ระบุหรือว่างเปล่า Bazel จะใช้ URL ของไฟล์เป็นรหัสแคนนอนิกโดยค่าเริ่มต้น วิธีนี้จะช่วยจับข้อผิดพลาดที่พบบ่อยในการอัปเดต URL โดยไม่อัปเดตแฮชด้วย ซึ่งส่งผลให้บิลด์สําเร็จในเครื่อง แต่ล้มเหลวในเครื่องที่ไม่มีไฟล์ในแคช คุณปิดใช้ลักษณะการทำงานนี้ได้โดยใช้ตัวเลือก --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0 |
downloaded_file_name |
สตริง ไม่บังคับ
ชื่อไฟล์ที่กำหนดให้กับไฟล์ jar ที่ดาวน์โหลด |
integrity |
สตริง ไม่บังคับ
checksum ที่คาดไว้ในรูปแบบความสมบูรณ์ของทรัพยากรย่อยของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับการตรวจสอบผลรวมของไฟล์ที่ดาวน์โหลด _การละเว้นการตรวจสอบข้อผิดพลาดนั้นมีความเสี่ยงด้านความปลอดภัยเนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้งานสร้างแบบไม่อยู่ภายใต้เงื่อนไข คุณเลือกที่จะใช้หรือไม่ก็ได้เพื่อให้การพัฒนาง่ายขึ้น แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ "sha256" ก่อนเผยแพร่ |
netrc |
สตริง ไม่บังคับ
ตำแหน่งของไฟล์ .netrc ที่จะใช้สำหรับการตรวจสอบสิทธิ์ |
repo_mapping |
พจนานุกรม: สตริง -> สตริง ต้องระบุ
พจนานุกรมจากชื่อที่เก็บในเครื่องเป็นชื่อที่เก็บส่วนกลาง การดำเนินการนี้ช่วยให้ควบคุมความละเอียดของทรัพยากร Dependency ของที่เก็บนี้ได้ ตัวอย่างเช่น รายการ `"@foo": "@bar"` ประกาศว่าเมื่อใดก็ตามที่ที่เก็บข้อมูลนี้ใช้@foo (เช่น ใช้@foo//some:target) ก็ควรแก้ไขการพึ่งพานั้นภายใน@bar ที่ประกาศไว้ทั่วโลก ("@bar//some:target") |
sha256 |
สตริง ไม่บังคับ
SHA-256 ที่คาดไว้ของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ SHA-256 ของไฟล์ที่ดาวน์โหลด _การละเว้น SHA-256 เป็นความเสี่ยงด้านความปลอดภัย เนื่องจากไฟล์ระยะไกลอาจเปลี่ยนแปลงได้_ การละเว้นฟิลด์นี้จะทำให้บิลด์ของคุณไม่ทำงาน คุณเลือกใช้แอตทริบิวต์นี้หรือไม่ก็ได้เพื่อให้การพัฒนาง่ายขึ้น แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ "integrity" ก่อนเผยแพร่ |
url |
สตริง ไม่บังคับ
URL ของไฟล์ที่จะทําให้ Bazel พร้อมใช้งาน ต้องเป็นไฟล์หรือ URL แบบ http หรือ https ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ คุณเพิ่มความยืดหยุ่นได้โดยใช้พารามิเตอร์ urls ที่อนุญาตให้ระบุ URL อื่นที่จะดึงข้อมูล URL ต้องลงท้ายด้วย ".jar" |
urls |
รายการสตริง ไม่บังคับ
รายการ URL ของไฟล์ที่จะทําให้ Bazel ใช้งานได้ แต่ละรายการต้องเป็น URL ของไฟล์, http หรือ https ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะลองใช้ URL ตามลำดับจนกว่าจะพบ URL ที่ใช้งานได้ คุณจึงควรระบุมิเรอร์ในเครื่องก่อน หากการดาวน์โหลดทั้งหมดไม่สำเร็จ กฎก็จะไม่สำเร็จ URL ทั้งหมดต้องลงท้ายด้วย ".jar" |