กฎที่เก็บ HTTP

ฟังก์ชันต่อไปนี้โหลดได้จาก @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 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 ไม่บังคับ

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

build_file_content สตริง (ไม่บังคับ)

เนื้อหาสำหรับไฟล์ BUILD สำหรับที่เก็บนี้ สามารถระบุบิลด์ [build_file] หรือ "build_file_content" ก็ได้ แต่ระบุทั้ง 2 อย่างไม่ได้

canonical_id สตริง (ไม่บังคับ)

รหัส Canonical ของไฟล์ที่ดาวน์โหลด หากระบุไว้และไม่ว่างเปล่า Bazel จะไม่นำไฟล์ออกจากแคช เว้นแต่จะเพิ่มไฟล์ลงในแคชโดยคำขอที่มีรหัส Canonical เดียวกัน หากไม่ระบุหรือเว้นว่างไว้ Bazel จะใช้ URL ของไฟล์เป็นรหัส Canonical โดยค่าเริ่มต้น การทำเช่นนี้จะช่วยดักจับข้อผิดพลาดที่พบบ่อยในการอัปเดต URL โดยไม่อัปเดตแฮชด้วย ส่งผลให้บิลด์ประสบความสำเร็จในเครื่องแต่ล้มเหลวในเครื่องที่ไม่มีไฟล์ในแคช คุณปิดใช้ลักษณะการทำงานนี้ได้ด้วย --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0

integrity สตริง (ไม่บังคับ)

ต้องการ checksum ในรูปแบบ Integrity ของทรัพยากรย่อยของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ checksum ของไฟล์ที่ดาวน์โหลด _การละเลยการตรวจสอบข้อผิดพลาดเนื่องจากไฟล์ระยะไกลสามารถเปลี่ยนแปลงได้_ การละเว้นช่องนี้อาจทำให้บิลด์ของคุณไม่มีปัญหาใดๆ คุณจะทำให้การพัฒนาง่ายขึ้นก็ได้ แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ "sha256" ก่อนจัดส่ง

netrc สตริง (ไม่บังคับ)

ตำแหน่งของไฟล์ .netrc ที่จะใช้สำหรับการตรวจสอบสิทธิ์

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

อาร์กิวเมนต์ที่มอบให้กับเครื่องมือแพตช์ ค่าเริ่มต้นคือ -p0 แต่โดยทั่วไปจะต้องใช้ -p1 สำหรับแพตช์ที่สร้างโดย Git ถ้ามีการระบุอาร์กิวเมนต์ -p หลายรายการ อาร์กิวเมนต์สุดท้ายจะมีผล หากระบุอาร์กิวเมนต์อื่นที่ไม่ใช่ -p Bazel จะกลับไปใช้เครื่องมือบรรทัดคำสั่งแพตช์แทนการติดตั้งใช้งานแพตช์ของ Bazel เนทีฟ เมื่อกลับไปใช้เครื่องมือบรรทัดคำสั่งแพตช์และไม่ได้ระบุแอตทริบิวต์ Pat_tool จะมีการใช้ "patch" โดยจะมีผลกับไฟล์แพตช์ในแอตทริบิวต์ "patches" เท่านั้น

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

ลำดับคำสั่ง Bash ที่จะนำไปใช้กับ Linux/Macos หลังการใช้แพตช์

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

ลำดับคำสั่ง Powershell ที่จะใช้กับ Windows หลังจากนำแพตช์ไปใช้ หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ระบบจะเรียกใช้แพตช์_cmds ใน Windows ซึ่งต้องใช้ไบนารี Bash อยู่

patch_tool สตริง (ไม่บังคับ)

โปรแกรมแพตช์(1) ที่จะใช้ หากมีการระบุไว้ Bazel จะใช้เครื่องมือแพตช์ที่ระบุแทนการติดตั้งใช้งานแพตช์แบบเนทีฟของ Bazel

patches รายการป้ายกำกับ ไม่บังคับ

รายชื่อไฟล์ที่จะนำไปใช้เป็นแพตช์หลังจากแตกไฟล์ที่เก็บถาวร โดยค่าเริ่มต้น จะใช้การใช้งานแพตช์แบบเนทีฟของ Bazel ซึ่งไม่รองรับการจับคู่ Fuzz และแพตช์ไบนารี แต่ Bazel จะกลับไปใช้เครื่องมือบรรทัดคำสั่งแพตช์หากมีการระบุแอตทริบิวต์ "patch_tool" ไว้หรือมีอาร์กิวเมนต์อื่นที่ไม่ใช่ "-p" ในแอตทริบิวต์ "patch_args"

remote_patch_strip จำนวนเต็ม ไม่บังคับ

จำนวนของเครื่องหมายทับที่จะตัดออกจากชื่อไฟล์ในแพตช์ระยะไกล

remote_patches Dictionary: String -> String ไม่บังคับ

แมปของ URL ของไฟล์แพตช์กับค่าความสมบูรณ์ ระบบจะนำมาใช้หลังจากแตกไฟล์ที่เก็บถาวรและก่อนนำไฟล์แพตช์จากแอตทริบิวต์ "patches" มาใช้ โดยใช้การใช้แพตช์แบบเนทีฟของ Bazel คุณสามารถระบุหมายเลขแถบแพตช์ได้ด้วย "remote_patch_strip"

repo_mapping พจนานุกรม: สตริง -> สตริง ต้องระบุ

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

เช่น รายการ `"@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.xz"`, "txz"`, "tar.xz"`,"txz"`,

url สตริง (ไม่บังคับ)

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

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

รายการ URL ของไฟล์ที่จะทำให้ใช้งานได้ใน Bazel แต่ละรายการต้องเป็น URL ไฟล์, http หรือ https ทำตามการเปลี่ยนเส้นทางแล้ว ไม่รองรับการตรวจสอบสิทธิ์ ระบบจะพยายาม 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 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 ของไฟล์เป็นรหัส Canonical โดยค่าเริ่มต้น การทำเช่นนี้จะช่วยดักจับข้อผิดพลาดที่พบบ่อยในการอัปเดต URL โดยไม่อัปเดตแฮชด้วย ส่งผลให้บิลด์ประสบความสำเร็จในเครื่องแต่ล้มเหลวในเครื่องที่ไม่มีไฟล์ในแคช คุณปิดใช้ลักษณะการทำงานนี้ได้ด้วย --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0

downloaded_file_path สตริง (ไม่บังคับ)

เส้นทางที่กําหนดให้กับไฟล์ที่ดาวน์โหลด

executable บูลีน ไม่บังคับ

ไฟล์ที่ดาวน์โหลดมาควรเป็นไฟล์สั่งการหรือไม่

integrity สตริง (ไม่บังคับ)

ต้องการ checksum ในรูปแบบ Integrity ของทรัพยากรย่อยของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ checksum ของไฟล์ที่ดาวน์โหลด _การละเลยการตรวจสอบข้อผิดพลาดเนื่องจากไฟล์ระยะไกลสามารถเปลี่ยนแปลงได้_ การละเว้นช่องนี้อาจทำให้บิลด์ของคุณไม่มีปัญหาใดๆ คุณจะทำให้การพัฒนาง่ายขึ้นก็ได้ แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ "sha256" ก่อนจัดส่ง

netrc สตริง (ไม่บังคับ)

ตำแหน่งของไฟล์ .netrc ที่จะใช้สำหรับการตรวจสอบสิทธิ์

repo_mapping พจนานุกรม: สตริง -> สตริง ต้องระบุ

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

http_jar

http_jar(name, auth_patterns, canonical_id, downloaded_file_name, integrity, netrc, repo_mapping,
         sha256, url, urls)

ดาวน์โหลดขวดโหลจาก 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 เป็นทรัพยากร Dependency เพื่ออ้างอิง Jar นี้

คุณอาจอ้างอิงไฟล์ในระบบปัจจุบัน (localhost) โดยใช้ "file:///path/to/file" ได้ หากคุณใช้ระบบ Unix หากคุณใช้ Windows ให้ใช้ "file:///c:/path/to/file" ในทั้ง 2 ตัวอย่าง ให้สังเกตเครื่องหมายทับ 3 อัน (/) โดยเครื่องหมายทับ 2 อันแรกเป็นของ file:// และเครื่องหมายทับที่ 3 เป็นของเส้นทางสัมบูรณ์ของไฟล์นั้น

Attributes

name 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 ของไฟล์เป็นรหัส Canonical โดยค่าเริ่มต้น การทำเช่นนี้จะช่วยดักจับข้อผิดพลาดที่พบบ่อยในการอัปเดต URL โดยไม่อัปเดตแฮชด้วย ส่งผลให้บิลด์ประสบความสำเร็จในเครื่องแต่ล้มเหลวในเครื่องที่ไม่มีไฟล์ในแคช คุณปิดใช้ลักษณะการทำงานนี้ได้ด้วย --repo_env=BAZEL_HTTP_RULES_URLS_AS_DEFAULT_CANONICAL_ID=0

downloaded_file_name สตริง (ไม่บังคับ)

ชื่อไฟล์ที่กำหนดให้กับโอ่งที่ดาวน์โหลด

integrity สตริง (ไม่บังคับ)

ต้องการ checksum ในรูปแบบ Integrity ของทรัพยากรย่อยของไฟล์ที่ดาวน์โหลด ซึ่งต้องตรงกับ checksum ของไฟล์ที่ดาวน์โหลด _การละเลยการตรวจสอบข้อผิดพลาดเนื่องจากไฟล์ระยะไกลสามารถเปลี่ยนแปลงได้_ การละเว้นช่องนี้อาจทำให้บิลด์ของคุณไม่มีปัญหาใดๆ คุณจะทำให้การพัฒนาง่ายขึ้นก็ได้ แต่ควรตั้งค่าแอตทริบิวต์นี้หรือ "sha256" ก่อนจัดส่ง

netrc สตริง (ไม่บังคับ)

ตำแหน่งของไฟล์ .netrc ที่จะใช้สำหรับการตรวจสอบสิทธิ์

repo_mapping พจนานุกรม: สตริง -> สตริง ต้องระบุ

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