กฎที่เก็บ 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_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 เป็นการอ้างอิง

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 พจนานุกรม: สตริง -> สตริง ไม่บังคับ

ไม่บังคับให้แมปชื่อโฮสต์กับรูปแบบการให้สิทธิ์ที่กำหนดเอง หากมีชื่อโฮสต์ของ 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 สตริง ไม่บังคับ

รหัส Canonical ของไฟล์ที่ดาวน์โหลด หากระบุและไม่ได้ว่างเปล่า 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_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"`, `"st `"t.

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 เป็นทรัพยากร Dependency เพื่ออ้างอิงไฟล์นี้

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 สตริง ไม่บังคับ

รหัส Canonical ของไฟล์ที่ดาวน์โหลด หากระบุและไม่ได้ว่างเปล่า 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; ต้องระบุ

พจนานุกรมจากชื่อที่เก็บในเครื่องเป็นชื่อที่เก็บส่วนกลาง ซึ่งช่วยให้ควบคุมการแก้ไขข้อกำหนดของพื้นที่ทำงานสำหรับข้อกำหนดของที่เก็บข้อมูลนี้ได้

ตัวอย่างเช่น รายการ `"@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 ไม่บังคับ

ไม่บังคับให้แมปชื่อโฮสต์กับรูปแบบการให้สิทธิ์ที่กำหนดเอง หากมีชื่อโฮสต์ของ 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 สตริง ไม่บังคับ

รหัส Canonical ของไฟล์ที่ดาวน์โหลด หากระบุและไม่ได้ว่างเปล่า 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 Dictionary: String -> String; ต้องระบุ

พจนานุกรมจากชื่อที่เก็บในเครื่องเป็นชื่อที่เก็บส่วนกลาง การดำเนินการนี้ช่วยให้ควบคุมความละเอียดของทรัพยากร 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 ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ คุณมีความยืดหยุ่นมากขึ้นได้ด้วยพารามิเตอร์ URL ที่ช่วยระบุ URL อื่นที่ต้องการดึงข้อมูล URL ต้องลงท้ายด้วย ".jar"

urls รายการสตริง (ไม่บังคับ)

รายการ URL ของไฟล์ที่จะทําให้ Bazel ใช้งานได้ แต่ละรายการต้องเป็นไฟล์หรือ URL ของ http หรือ https ติดตามการเปลี่ยนเส้นทาง ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะลองใช้ URL ตามลำดับจนกว่าจะพบ URL ที่ใช้งานได้ คุณจึงควรระบุมิเรอร์ในเครื่องก่อน หากการดาวน์โหลดทั้งหมดไม่สำเร็จ กฎก็จะไม่สำเร็จ URL ทั้งหมดต้องลงท้ายด้วย ".jar"