กฎที่เก็บ HTTP

รายงานปัญหา ดูแหล่งที่มา รุ่น Nightly · 7.4 7.3 · 7.2 · 7.1 · 7.0 · 6.5

โหลดฟังก์ชันต่อไปนี้ได้จาก @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 รายการ ได้แก่ <login> และ <password> ซึ่งแทนที่ด้วยค่าที่เทียบเท่าในไฟล์ netrc สำหรับชื่อโฮสต์เดียวกัน หลังจากจัดรูปแบบแล้ว ระบบจะตั้งค่าผลลัพธ์เป็นค่าสำหรับฟิลด์ Authorization ของคำขอ HTTP ตัวอย่างแอตทริบิวต์และ netrc สำหรับการดาวน์โหลด http ไปยัง API ที่เปิดใช้ oauth2 โดยใช้โทเค็นสำหรับผู้ถือ:

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
คําขอ HTTP สุดท้ายจะมีส่วนหัวดังต่อไปนี้
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 รายการ ได้แก่ <login> และ <password> ซึ่งระบบจะแทนที่ด้วยค่าที่เทียบเท่าในไฟล์ netrc สำหรับชื่อโฮสต์เดียวกัน หลังจากจัดรูปแบบแล้ว ระบบจะตั้งค่าผลลัพธ์เป็นค่าสำหรับฟิลด์ Authorization ของคำขอ HTTP ตัวอย่างแอตทริบิวต์และ netrc สำหรับการดาวน์โหลด http ไปยัง API ที่เปิดใช้ oauth2 โดยใช้โทเค็นของผู้ถือครอง

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
คําขอ HTTP สุดท้ายจะมีส่วนหัวดังต่อไปนี้
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 รายการ ได้แก่ <login> และ <password> ซึ่งระบบจะแทนที่ด้วยค่าที่เทียบเท่าในไฟล์ netrc สำหรับชื่อโฮสต์เดียวกัน หลังจากจัดรูปแบบแล้ว ระบบจะตั้งค่าผลลัพธ์เป็นค่าสำหรับฟิลด์ Authorization ของคำขอ HTTP ตัวอย่างแอตทริบิวต์และ netrc สำหรับการดาวน์โหลด http ไปยัง API ที่เปิดใช้ oauth2 โดยใช้โทเค็นของผู้ถือครอง

auth_patterns = {
    "storage.cloudprovider.com": "Bearer <password>"
}
netrc:
machine storage.cloudprovider.com
        password RANDOM-TOKEN
คําขอ HTTP สุดท้ายจะมีส่วนหัวดังต่อไปนี้
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"