กฎของ Java

รายงานปัญหา ดูแหล่งที่มา

กฎ

java_binary

ดูแหล่งที่มาของกฎ
java_binary(name, deps, srcs, data, resources, args, classpath_resources, compatible_with, create_executable, deploy_env, deploy_manifest_lines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, javacopts, jvm_flags, launcher, licenses, main_class, output_licenses, plugins, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, stamp, tags, target_compatible_with, testonly, toolchains, use_launcher, use_testrunner, visibility)

สร้างที่เก็บถาวรของ Java ("ไฟล์ jar") และสคริปต์เชลล์ Wrapper ที่มีชื่อเดียวกับกฎ สคริปต์ Shell Wrapper จะใช้คลาสพาธซึ่งรวมไฟล์ Jar สำหรับแต่ละไลบรารีที่ไบนารีอ้างอิงอยู่ เมื่อเรียกใช้สคริปต์ Shell Wrapper ของ Wrapper ตัวแปรสภาพแวดล้อม JAVABIN ใดๆ จะมีความสำคัญเหนือกว่าเวอร์ชันที่ระบุผ่านแฟล็ก --java_runtime_version ของ Bazel

สคริปต์ Wrapper ยอมรับแฟล็กที่ไม่ซ้ำกันหลายรายการ โปรดดู//src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txtสำหรับรายการแฟล็กที่กำหนดค่าได้และตัวแปรสภาพแวดล้อมที่ Wrapper ยอมรับ

เป้าหมายเอาต์พุตแบบไม่เจาะจงปลายทาง

  • name.jar: ที่เก็บถาวรของ Java ที่มีไฟล์คลาสและทรัพยากรอื่นๆ ที่เกี่ยวข้องกับทรัพยากร Dependency โดยตรงของไบนารี
  • name-src.jar: ที่เก็บถาวรที่มีแหล่งที่มา ("Jar แหล่งที่มา")
  • name_deploy.jar: ที่เก็บถาวรของ Java ที่เหมาะสำหรับการทำให้ใช้งานได้ (สร้างเมื่อมีการขออย่างชัดแจ้งเท่านั้น)

    การสร้างเป้าหมาย <name>_deploy.jar สำหรับกฎจะสร้างไฟล์ Jar แบบในตัว ซึ่งมีไฟล์ Manifest ที่ช่วยให้รันด้วยคำสั่ง java -jar หรือด้วยตัวเลือก --singlejar ของสคริปต์ Wrapper เราขอแนะนำให้ใช้สคริปต์ Wrapper กับ java -jar เนื่องจากมีการส่งแฟล็ก JVM และตัวเลือกในการโหลดไลบรารีแบบเนทีฟด้วย

    Jar การทำให้ใช้งานได้มีคลาสทั้งหมดที่ตัวโหลดคลาสจะพบซึ่งค้นหาคลาสพาธจากสคริปต์ Wrapper ของไบนารีตั้งแต่ต้นจนจบ และยังมีไลบรารีเนทีฟที่จำเป็นสำหรับทรัพยากร Dependency ด้วย ซึ่งจะโหลดลงใน JVM ขณะรันไทม์โดยอัตโนมัติ

    หากเป้าหมายระบุแอตทริบิวต์ launcher _deploy.jar จะเป็นไบนารีแบบเนทีฟแทนการเป็นไฟล์ JAR ปกติ ซึ่งจะมี Launcher รวมถึงทรัพยากร Dependency (C++) ของกฎโดยทั้งหมดที่ลิงก์อยู่ในไบนารีแบบคงที่ ไบต์จริงของไฟล์ jar จะผนวกเข้ากับไบนารีเนทีฟนั้น เพื่อสร้าง Blob ไบนารีเดียวที่มีทั้งไฟล์ปฏิบัติการและโค้ด Java คุณเรียกใช้ไฟล์ jar ที่ได้ได้โดยตรงเหมือนกับที่เรียกใช้ไบนารีเนทีฟ

  • name_deploy-src.jar: ที่เก็บถาวรที่มีแหล่งที่มาซึ่งรวบรวมจากการปิดเป้าหมายแบบทางอ้อม ซึ่งจะตรงกับคลาสใน deploy.jar ยกเว้นกรณีที่ Jars ไม่มี Jar ที่ตรงกัน

ไม่อนุญาตให้มีแอตทริบิวต์ deps ในกฎ java_binary ที่ไม่มี srcs กฎดังกล่าวต้องใช้ main_class จาก runtime_deps

ข้อมูลโค้ดต่อไปนี้แสดงให้เห็นถึงข้อผิดพลาดที่พบบ่อย

java_binary(
    name = "DontDoThis",
    srcs = [
        ...,
        "GeneratedJavaFile.java",  # a generated .java file
    ],
    deps = [":generating_rule"],  # rule that generates that file
)

ให้ดำเนินการดังนี้แทน

java_binary(
    name = "DoThisInstead",
    srcs = [
        ...,
        ":generating_rule",
    ],
)

อาร์กิวเมนต์

Attributes
name

ต้องระบุชื่อ

ชื่อที่ไม่ซ้ำกันของเป้าหมายนี้


แนวทางปฏิบัติที่ดีคือการใช้ชื่อไฟล์ต้นฉบับที่เป็นจุดแรกเข้าหลักของแอปพลิเคชัน (ลบส่วนขยาย) ตัวอย่างเช่น หากจุดแรกเข้าชื่อว่า Main.java ชื่ออาจเป็น Main
deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไลบรารีอื่นๆ ที่จะลิงก์กับเป้าหมาย ดูความคิดเห็นทั่วไปเกี่ยวกับ deps ได้ที่แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎการสร้างส่วนใหญ่
srcs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ต้นฉบับที่ประมวลผลเพื่อสร้างเป้าหมาย แอตทริบิวต์นี้แทบจะเป็นแอตทริบิวต์ที่จำเป็น โปรดดูข้อยกเว้นด้านล่าง

ระบบจะคอมไพล์ไฟล์ต้นฉบับประเภท .java แล้ว ในกรณีที่สร้างไฟล์ .java เราขอแนะนำให้ใส่ชื่อกฎที่สร้างที่นี่แทนชื่อไฟล์ วิธีนี้ไม่เพียงช่วยให้อ่านง่ายขึ้นเท่านั้น แต่ยังทำให้กฎยืดหยุ่นต่อการเปลี่ยนแปลงในอนาคตมากขึ้นด้วย หากกฎที่สร้างขึ้นสร้างไฟล์อื่นในอนาคต คุณจะต้องแก้ไขเพียงที่เดียว นั่นคือ outs ของกฎที่สร้าง คุณไม่ควรระบุกฎที่สร้างใน deps เพราะเป็นกฎที่ไม่มีการดำเนินการ

ไฟล์ต้นฉบับประเภท .srcjar จะถูกคลายการแพคและคอมไพล์แล้ว (วิธีนี้มีประโยชน์หากต้องการสร้างชุดไฟล์ .java ที่มีกฎเกณฑ์)

กฎ: หากกฎ (โดยทั่วไปคือ genrule หรือ filegroup) สร้างไฟล์ใดก็ตามที่ระบุไว้ด้านบน ระบบจะใช้กฎดังกล่าวในวิธีเดียวกับที่อธิบายไว้ไฟล์ต้นฉบับ

ระบบต้องใช้อาร์กิวเมนต์นี้แทบทุกครั้ง ยกเว้นในกรณีที่แอตทริบิวต์ main_class ระบุคลาสในคลาสพาธรันไทม์หรือคุณระบุอาร์กิวเมนต์ runtime_deps

resources

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ข้อมูลที่จะใส่ใน Java jar

หากระบุทรัพยากรแล้ว ระบบจะรวมทรัพยากรเหล่านั้นไว้ใน Jar พร้อมกับไฟล์ .class ปกติที่สร้างจากการคอมไพล์ ตำแหน่งของทรัพยากรภายในไฟล์ Jar จะกำหนดตามโครงสร้างโปรเจ็กต์ ก่อนอื่น Bazel จะมองหาเลย์เอาต์ไดเรกทอรีมาตรฐานของ Maven (ไดเรกทอรี "src" ตามด้วยไดเรกทอรี "resources" ระดับล่าง) หากไม่พบค่านี้ Bazel ก็จะมองหาไดเรกทอรีระดับบนสุดที่ชื่อ "java" หรือ "javatests" (เช่น หากทรัพยากรอยู่ที่ <workspace root>/x/java/y/java/z เส้นทางของทรัพยากรจะเป็น y/java/z ระบบลบล้างการเรียนรู้ลักษณะนี้ไม่ได้ แต่จะใช้แอตทริบิวต์ resource_strip_prefix เพื่อระบุไดเรกทอรีทางเลือกที่เจาะจงสำหรับไฟล์ทรัพยากรได้

ทรัพยากรอาจเป็นไฟล์ต้นฉบับหรือไฟล์ที่สร้างขึ้น

classpath_resources

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

อย่าใช้ตัวเลือกนี้เว้นแต่จะเป็นเช่นนั้น)

รายการทรัพยากรที่ต้องอยู่ที่รากของ java Tree วัตถุประสงค์ของแอตทริบิวต์นี้อย่างเดียวคือเพื่อรองรับไลบรารีของบุคคลที่สามที่กำหนดให้ต้องพบทรัพยากรในคลาสพาธเหมือนกับ "myconfig.xml" และใช้ได้เฉพาะในไบนารี ไม่ใช่ไลบรารี เนื่องจากอันตรายจากข้อขัดแย้งของเนมสเปซ

create_executable

บูลีน ไม่สามารถกำหนดค่าได้ ค่าเริ่มต้นคือ True

เลิกใช้งานแล้ว โปรดใช้ java_single_jar แทน
deploy_env

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการเป้าหมาย java_binary อื่นๆ ที่แสดงถึงสภาพแวดล้อมการทำให้ใช้งานได้สำหรับไบนารีนี้ ตั้งค่าแอตทริบิวต์นี้เมื่อสร้างปลั๊กอินซึ่ง java_binary อื่นจะโหลด
การตั้งค่าแอตทริบิวต์นี้จะยกเว้นทรัพยากร Dependency ทั้งหมดจากคลาสพาธรันไทม์ (และ jar ที่ใช้การทำให้ใช้งานได้) ของไบนารีนี้ที่แชร์ระหว่างไบนารีนี้กับเป้าหมายที่ระบุไว้ใน deploy_env
deploy_manifest_lines

รายการสตริง ค่าเริ่มต้นคือ []

รายการบรรทัดที่จะเพิ่มลงในไฟล์ META-INF/manifest.mf ที่สร้างขึ้นสำหรับเป้าหมาย *_deploy.jar เนื้อหาของแอตทริบิวต์นี้ไม่อยู่ภายใต้การแทนที่ "สร้างตัวแปร"
javacopts

รายการสตริง ค่าเริ่มต้นคือ []

ตัวเลือกคอมไพเลอร์เพิ่มเติมสำหรับไลบรารีนี้ ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" และการแปลงข้อมูลเป็นโทเค็นของ Bourne shell

ระบบจะส่งตัวเลือกคอมไพเลอร์เหล่านี้ไปยัง Javac หลังตัวเลือกคอมไพเลอร์ส่วนกลาง

jvm_flags

รายการสตริง ค่าเริ่มต้นคือ []

รายการแฟล็กที่จะฝังในสคริปต์ Wrapper ที่สร้างขึ้นสำหรับการเรียกใช้ไบนารีนี้ ขึ้นอยู่กับการแทนที่ $(location) และ "Makeตัวแปร" และการแปลงข้อมูลเป็นโทเค็นของ Bourne shell

สคริปต์ Wrapper สำหรับไบนารีของ Java มีคําจํากัดความ CLASSPATH (เพื่อค้นหา Jar ที่ไม่เป็นอิสระทั้งหมด) และเรียกใช้ล่าม Java ที่ถูกต้อง บรรทัดคำสั่งที่สร้างโดยสคริปต์ Wrapper จะมีชื่อของคลาสหลักตามด้วย "$@" เพื่อให้คุณส่งต่ออาร์กิวเมนต์อื่นๆ หลังชื่อคลาสได้ อย่างไรก็ตาม คุณต้องระบุอาร์กิวเมนต์ที่มีไว้สำหรับการแยกวิเคราะห์โดย JVM ก่อนชื่อคลาสในบรรทัดคำสั่ง เนื้อหาของ jvm_flags จะเพิ่มในสคริปต์ Wrapper ก่อนที่ชื่อคลาสจะแสดง

โปรดทราบว่าแอตทริบิวต์นี้ไม่มีผลกับเอาต์พุต *_deploy.jar

launcher

ป้ายกำกับ ค่าเริ่มต้นคือ None

ระบุไบนารีที่จะใช้ในการเรียกใช้โปรแกรม Java แทนโปรแกรม bin/java ปกติที่มาพร้อมกับ JDK เป้าหมายต้องเป็น cc_binary คุณระบุ cc_binary ที่ใช้ Ja Invocation API เป็นค่าสำหรับแอตทริบิวต์นี้ได้

โดยค่าเริ่มต้น Bazel จะใช้ JDK Launcher ปกติ (bin/java หรือ java.exe)

แฟล็ก --java_launcher Bazel ที่เกี่ยวข้องจะส่งผลต่อเป้าหมาย java_binary และ java_test ที่ไม่ระบุแอตทริบิวต์ launcher เท่านั้น

โปรดทราบว่าทรัพยากร Dependency (C++, SWIG, JNI) จะสร้างขึ้นต่างออกไป ขึ้นอยู่กับว่าคุณใช้ JDK Launcher หรือ Launcher อื่น ดังนี้

  • หากคุณใช้ JDK Launcher ปกติ (ค่าเริ่มต้น) ทรัพยากร Dependency แบบเนทีฟจะสร้างขึ้นเป็นไลบรารีที่ใช้ร่วมกันชื่อ {name}_nativedeps.so โดยที่ {name} คือแอตทริบิวต์ name ของกฎ java_binary นี้ ตัวลิงก์จะไม่นำโค้ดที่ไม่ได้ใช้ออกในการกำหนดค่านี้
  • หากคุณใช้ Launcher อื่น ทรัพยากร Dependency (C++) จะลิงก์แบบคงที่ไปยังไบนารีชื่อ {name}_nativedeps โดยที่ {name} คือแอตทริบิวต์ name ของกฎ java_binary นี้ ในกรณีนี้ ตัวลิงก์จะนำโค้ดที่คิดว่าไม่ได้ใช้ออกจากไบนารีที่ได้ ซึ่งหมายความว่าจะไม่มีการลิงก์โค้ด C++ ที่เข้าถึงผ่าน JNI เท่านั้น เว้นแต่เป้าหมาย cc_library จะระบุ alwayslink = 1

เมื่อใช้ Launcher ใดก็ตามนอกเหนือจาก JDK Launcher เริ่มต้น รูปแบบของเอาต์พุต *_deploy.jar จะเปลี่ยนแปลง ดูรายละเอียดในเอกสาร java_binary หลัก

main_class

สตริง ค่าเริ่มต้นคือ ""

ชื่อคลาสที่มีเมธอด main() เพื่อใช้เป็นจุดแรกเข้า หากกฎใช้ตัวเลือกนี้ จะไม่จำเป็นต้องมีรายการ srcs=[...] ดังนั้น แอตทริบิวต์นี้จะสร้างไฟล์ปฏิบัติการจากไลบรารี Java ที่มีเมธอด main() อย่างน้อย 1 รายการได้อยู่แล้ว

ค่าของแอตทริบิวต์นี้เป็นชื่อคลาส ไม่ใช่ไฟล์ต้นฉบับ คลาสต้องพร้อมใช้งานขณะรันไทม์: อาจคอมไพล์โดยกฎนี้ (จาก srcs) หรือกำหนดโดยทรัพยากร Dependency โดยตรงหรือทรัพยากร Dependency (ผ่าน runtime_deps หรือ deps) หากคลาสไม่พร้อมใช้งาน ไบนารีจะล้มเหลวขณะรันไทม์ และไม่มีการตรวจสอบเวลาบิลด์

plugins

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ปลั๊กอินคอมไพเลอร์ของ Java ที่จะเรียกใช้ในเวลาคอมไพล์ java_plugin ทุกรายการที่ระบุในแอตทริบิวต์นี้จะทำงานเมื่อมีการสร้างกฎนี้ ไลบรารีอาจรับค่าปลั๊กอินจากทรัพยากร Dependency ที่ใช้ exported_plugins ด้วย ทรัพยากรที่สร้างโดยปลั๊กอินจะรวมอยู่ในโหลผลลัพธ์ของกฎนี้
resource_jars

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

เลิกใช้แล้ว: ใช้ java_import และ deps หรือ timer_deps แทน
resource_strip_prefix

สตริง ค่าเริ่มต้นคือ ""

คำนำหน้าเส้นทางเพื่อตัดจากทรัพยากร Java

หากระบุไว้ ระบบจะตัดคำนำหน้าเส้นทางนี้ออกจากทุกไฟล์ในแอตทริบิวต์ resources เป็นข้อผิดพลาดสำหรับไฟล์ทรัพยากรที่ไม่อยู่ในไดเรกทอรีนี้ หากไม่ได้ระบุไว้ (ค่าเริ่มต้น) ระบบจะกำหนดเส้นทางของไฟล์ทรัพยากรตามตรรกะเดียวกันกับแพ็กเกจ Java ของไฟล์ต้นฉบับ เช่น ไฟล์ต้นฉบับที่ stuff/java/foo/bar/a.txt จะอยู่ที่ foo/bar/a.txt

runtime_deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไลบรารีให้พร้อมใช้งานสำหรับไบนารีสุดท้ายหรือการทดสอบขณะรันไทม์เท่านั้น รายการเหล่านี้จะปรากฏใน classpath ของรันไทม์เช่นเดียวกับ deps ทั่วไป แต่จะไม่ปรากฏในคลาสพาธการคอมไพล์ การขึ้นต่อกันที่จำเป็นเฉพาะรันไทม์ควรแสดงที่นี่ เครื่องมือวิเคราะห์การขึ้นต่อกันไม่ควรสนใจเป้าหมายที่ปรากฏทั้งใน runtime_deps และ deps
stamp

จำนวนเต็ม ค่าเริ่มต้นคือ -1

จะเข้ารหัสข้อมูลของบิลด์ลงในไบนารีไหม ค่าที่เป็นไปได้มีดังนี้
  • stamp = 1: ประทับข้อมูลบิลด์ลงในไบนารีเสมอ แม้แต่ในบิลด์ --nostamp ก็ตาม ควรหลีกเลี่ยงการตั้งค่านี้ เนื่องจากอาจทำให้การแคชระยะไกลสำหรับไบนารีและการดำเนินการดาวน์สตรีมที่ต้องใช้การตั้งค่าดังกล่าวไม่ทำงาน
  • stamp = 0: แทนที่ข้อมูลของบิลด์ด้วยค่าคงที่เสมอ ซึ่งจะช่วยให้มีการแคชผลลัพธ์ของบิลด์ที่ดี
  • stamp = -1: การฝังข้อมูลของบิลด์ควบคุมด้วยแฟล็ก --[no]stamp

ไบนารีที่ประทับตราจะไม่ได้รับการสร้างขึ้นใหม่เว้นแต่จะมีการเปลี่ยนแปลงทรัพยากร Dependency

use_launcher

บูลีน ค่าเริ่มต้นคือ True

ไบนารีควรใช้ Launcher ที่กำหนดเองหรือไม่

หากตั้งค่าแอตทริบิวต์นี้เป็น "เท็จ" ระบบจะไม่สนใจแอตทริบิวต์ launcher และแฟล็ก --java_launcher ที่เกี่ยวข้องสำหรับเป้าหมายนี้

use_testrunner

บูลีน ค่าเริ่มต้นคือ False

ใช้คลาสตัวดำเนินการทดสอบ (โดยค่าเริ่มต้น com.google.testing.junit.runner.BazelTestRunner) เป็นจุดแรกเข้าหลักสำหรับโปรแกรม Java และระบุคลาสการทดสอบให้กับตัวดำเนินการทดสอบเป็นค่าของพร็อพเพอร์ตี้ระบบ bazel.test_suite คุณใช้ตัวเลือกนี้เพื่อลบล้างลักษณะการทํางานเริ่มต้นได้ ซึ่งก็คือการใช้ตัวดำเนินการทดสอบสำหรับกฎ java_test และไม่ใช้กับกฎ java_binary คุณไม่ควรทำเช่นนั้น การใช้งานแบบหนึ่งมีไว้สำหรับกฎ AllTest ที่เรียกใช้โดยกฎอื่น (เช่น เพื่อตั้งค่าฐานข้อมูลก่อนทำการทดสอบ) ต้องประกาศกฎ AllTest เป็น java_binary แต่ยังคงใช้ตัวดำเนินการทดสอบเป็นจุดแรกเข้าหลัก ชื่อของคลาสตัวดำเนินการทดสอบลบล้างได้ด้วยแอตทริบิวต์ main_class

java_import

ดูแหล่งที่มาของกฎ
java_import(name, deps, data, add_exports, add_opens, compatible_with, constraints, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, toolchains, visibility)

กฎนี้อนุญาตให้ใช้ไฟล์ .jar ที่คอมไพล์ไว้ล่วงหน้าเป็นไลบรารีสำหรับกฎ java_library และ java_binary

ตัวอย่าง


    java_import(
        name = "maven_model",
        jars = [
            "maven_model/maven-aether-provider-3.2.3.jar",
            "maven_model/maven-model-3.2.3.jar",
            "maven_model/maven-model-builder-3.2.3.jar",
        ],
    )

อาร์กิวเมนต์

Attributes
name

ต้องระบุชื่อ

ชื่อที่ไม่ซ้ำกันของเป้าหมายนี้

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไลบรารีอื่นๆ ที่จะลิงก์กับเป้าหมาย โปรดดู java_library.deps
data

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ที่กฎนี้ต้องการขณะรันไทม์
add_exports

รายการสตริง ค่าเริ่มต้นคือ []

อนุญาตให้ไลบรารีนี้เข้าถึง module หรือ package ที่ระบุ

ซึ่งสอดคล้องกับแฟล็ก JavaScript และ JVM --add-exports=

add_opens

รายการสตริง ค่าเริ่มต้นคือ []

อนุญาตให้คลังนี้เข้าถึง module หรือ package ที่ระบุ

ซึ่งสอดคล้องกับแฟล็ก JavaScript และ JVM --add-opens=

constraints

รายการสตริง ค่าเริ่มต้นคือ []

ข้อจำกัดเพิ่มเติมที่บังคับใช้ในกฎนี้เป็นไลบรารี Java
exports

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

เป้าหมายที่จะให้ผู้ใช้ของกฎนี้ใช้งานได้ โปรดดู java_library.exports
jars

รายการป้ายกำกับ ต้องระบุ

รายการไฟล์ JAR ที่ระบุให้กับเป้าหมาย Java ที่ขึ้นอยู่กับเป้าหมายนี้

บูลีน ค่าเริ่มต้นคือ False

ใช้ไลบรารีนี้สำหรับการคอมไพล์เท่านั้น ไม่ใช่ระหว่างรันไทม์ มีประโยชน์หากสภาพแวดล้อมรันไทม์จัดเตรียมไลบรารีไว้ให้ระหว่างการดำเนินการ ตัวอย่างของไลบรารีลักษณะนี้คือ IDE API สำหรับปลั๊กอิน IDE หรือ tools.jar สำหรับทุกสิ่งที่ทำงานบน JDK มาตรฐาน
proguard_specs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไฟล์ที่จะใช้เป็นข้อมูลจำเพาะของ Proguard ซึ่งจะอธิบายชุดข้อกำหนดจำเพาะที่ Proguard จะใช้ หากระบุไว้ ระบบจะเพิ่มเป้าหมายไปยัง android_binary โดยอิงตามไลบรารีนี้ ไฟล์ที่รวมที่นี่ต้องมีเฉพาะกฎที่เป็นเอกลักษณ์เท่านั้น กล่าวคือ -dontnote, -dontwarn, assimenosideeffects และกฎที่ขึ้นต้นด้วย -keep ตัวเลือกอื่นๆ จะปรากฏใน proguard_specs ของ android_binary เท่านั้นเพื่อให้แน่ใจว่ามีการผสานที่ไม่ใช่ tautoological รวม
runtime_deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไลบรารีให้พร้อมใช้งานสำหรับไบนารีสุดท้ายหรือการทดสอบขณะรันไทม์เท่านั้น โปรดดู java_library.runtime_deps
srcjar

ป้ายกำกับ ค่าเริ่มต้นคือ None

ไฟล์ JAR ที่มีซอร์สโค้ดสำหรับไฟล์ JAR ที่คอมไพล์

java_library

ดูแหล่งที่มาของกฎ
java_library(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exported_plugins, exports, features, javabuilder_jvm_flags, javacopts, licenses, neverlink, plugins, proguard_specs, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, toolchains, visibility)

กฎนี้จะรวบรวมและลิงก์แหล่งที่มาในไฟล์ .jar

เอาต์พุตโดยนัย

  • libname.jar: ที่เก็บถาวรของ Java ที่มีไฟล์คลาส
  • libname-src.jar: ที่เก็บถาวรที่มีแหล่งที่มา ("Jar แหล่งที่มา")

อาร์กิวเมนต์

Attributes
name

ต้องระบุชื่อ

ชื่อที่ไม่ซ้ำกันของเป้าหมายนี้

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายชื่อไลบรารีที่จะลิงก์เข้าสู่ไลบรารีนี้ ดูความคิดเห็นทั่วไปเกี่ยวกับ deps ได้ที่แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎการสร้างส่วนใหญ่

Jars ที่สร้างโดยกฎ java_library ที่ระบุไว้ใน deps จะอยู่ในคลาสพาธเวลาคอมไพล์ของกฎนี้ นอกจากนี้ การปิดทางอ้อมของ deps, runtime_deps และ exports จะอยู่ในคลาสพาธรันไทม์

ในทางตรงกันข้าม เป้าหมายในแอตทริบิวต์ data จะรวมอยู่ใน Runfile แต่ไม่ใช่ทั้งคลาสคอมไพล์และคลาสพาธรันไทม์

srcs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ต้นฉบับที่ประมวลผลเพื่อสร้างเป้าหมาย แอตทริบิวต์นี้แทบจะเป็นแอตทริบิวต์ที่จำเป็น โปรดดูข้อยกเว้นด้านล่าง

ระบบจะคอมไพล์ไฟล์ต้นฉบับประเภท .java แล้ว ในกรณีที่สร้างไฟล์ .java เราขอแนะนำให้ใส่ชื่อกฎที่สร้างที่นี่แทนชื่อไฟล์ วิธีนี้ไม่เพียงช่วยให้อ่านง่ายขึ้นเท่านั้น แต่ยังทำให้กฎมีความยืดหยุ่นต่อการเปลี่ยนแปลงในอนาคตมากขึ้นด้วย หากกฎที่สร้างขึ้นสร้างไฟล์อื่นในอนาคต คุณจะต้องแก้ไขเพียงที่เดียว นั่นคือ outs ของกฎที่สร้างขึ้น คุณไม่ควรระบุกฎที่สร้างใน deps เนื่องจากเป็นกฎที่ไม่มีการดำเนินการ

ไฟล์ต้นฉบับประเภท .srcjar จะถูกคลายการแพคและคอมไพล์แล้ว (วิธีนี้มีประโยชน์เมื่อคุณต้องสร้างชุดไฟล์ .java ที่มีกฎเกณฑ์)

กฎ: หากกฎ (โดยทั่วไปคือ genrule หรือ filegroup) สร้างไฟล์ใดก็ตามที่ระบุไว้ด้านบน ระบบจะใช้กฎดังกล่าวในวิธีเดียวกับที่อธิบายไว้ไฟล์ต้นฉบับ

ไฟล์ต้นฉบับประเภท .properties จะถือว่าเป็นทรัพยากร

ระบบจะไม่สนใจไฟล์อื่นๆ ทั้งหมด ตราบใดที่มีประเภทไฟล์ดังที่อธิบายไว้ข้างต้นอย่างน้อย 1 ไฟล์ มิฉะนั้นระบบจะแสดงข้อผิดพลาด

อาร์กิวเมนต์นี้แทบจะจำเป็นเสมอ ยกเว้นในกรณีที่คุณระบุอาร์กิวเมนต์ runtime_deps

data

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ที่ไลบรารีนี้ต้องการขณะรันไทม์ ดูความคิดเห็นทั่วไปเกี่ยวกับ data ได้ที่แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎการสร้างส่วนใหญ่

เมื่อสร้าง java_library Bazel จะไม่นำไฟล์เหล่านี้ไปวางไว้ที่ใดๆ หากไฟล์ data เป็นไฟล์ Bazel จะสร้างขึ้นมา เมื่อสร้างการทดสอบที่ขึ้นอยู่กับ java_library Bazel นี้คัดลอกหรือลิงก์ไฟล์ data เข้ากับพื้นที่ Runfile

resources

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ข้อมูลที่จะใส่ใน Java jar

ทรัพยากรอาจเป็นไฟล์ต้นฉบับหรือไฟล์ที่สร้างขึ้น

หากระบุทรัพยากรแล้ว ระบบจะรวมทรัพยากรเหล่านั้นไว้ใน Jar พร้อมกับไฟล์ .class ปกติที่สร้างจากการคอมไพล์ ตำแหน่งของทรัพยากรภายในไฟล์ Jar จะกำหนดตามโครงสร้างโปรเจ็กต์ ก่อนอื่น Bazel จะมองหาเลย์เอาต์ไดเรกทอรีมาตรฐานของ Maven (ไดเรกทอรี "src" ตามด้วยไดเรกทอรี "resources" ระดับล่าง) หากไม่พบค่านี้ Bazel ก็จะมองหาไดเรกทอรีระดับบนสุดชื่อ "java" หรือ "javatests" (เช่น หากทรัพยากรอยู่ที่ <workspace root>/x/java/y/java/z เส้นทางของทรัพยากรจะเป็น y/java/z การเรียนรู้นี้จะลบล้างไม่ได้ แต่แอตทริบิวต์ resource_strip_prefix จะใช้เพื่อระบุไดเรกทอรีทางเลือกที่เจาะจงสำหรับไฟล์ทรัพยากรได้

add_exports

รายการสตริง ค่าเริ่มต้นคือ []

อนุญาตให้ไลบรารีนี้เข้าถึง module หรือ package ที่ระบุ

ซึ่งสอดคล้องกับแฟล็ก JavaScript และ JVM --add-exports=

add_opens

รายการสตริง ค่าเริ่มต้นคือ []

อนุญาตให้คลังนี้เข้าถึง module หรือ package ที่ระบุ

ซึ่งสอดคล้องกับแฟล็ก JavaScript และ JVM --add-opens=

bootclasspath

ป้ายกำกับ ค่าเริ่มต้นคือ None

จำกัด API อย่าใช้
exported_plugins

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการ java_plugin (เช่น โปรเซสเซอร์คำอธิบายประกอบ) ที่จะส่งออกไปยังไลบรารีที่ขึ้นอยู่กับไลบรารีนี้โดยตรง

ระบบจะใช้รายการ java_plugin ที่ระบุกับไลบรารีใดๆ ที่ขึ้นอยู่กับไลบรารีนี้โดยตรง เช่นเดียวกับที่ไลบรารีดังกล่าวประกาศป้ายกำกับเหล่านี้อย่างชัดเจนใน plugins

exports

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไลบรารีที่ส่งออก

กฎข้อมูลในรายการนี้จะทำให้กฎเหล่านี้ใช้ได้กับกฎระดับบนสุด ราวกับว่ากฎหลักจะขึ้นอยู่กับกฎเหล่านี้อย่างชัดแจ้ง กรณีนี้ไม่เป็นจริงสําหรับ deps ปกติ (ไม่ได้ส่งออก)

สรุป: กฎ X จะเข้าถึงโค้ดใน Y ได้หากมีเส้นทางทรัพยากร Dependency ระหว่างเส้นทางที่ขึ้นต้นด้วยขอบ deps ตามด้วยขอบ exports ศูนย์ขึ้นไป มาดูตัวอย่างที่อธิบายเรื่องนี้กัน

สมมติว่า A ขึ้นอยู่กับ B และ B ขึ้นอยู่กับ C ในกรณีนี้ C เป็นทรัพยากร Dependency แบบผกผันของ A ดังนั้นการเปลี่ยนแหล่งที่มาของ C และสร้าง A ใหม่จะเป็นการสร้างทุกอย่างขึ้นมาใหม่อย่างถูกต้อง แต่ A จะใช้ชั้นเรียนใน C ไม่ได้ ดังนั้น A จะต้องประกาศ C ใน deps มิเช่นนั้น B จะทำให้ A (และทุกอย่างที่อาจขึ้นอยู่กับ A ง่ายขึ้น) ด้วยการประกาศ C ในแอตทริบิวต์ exports (ของ B)

กฎระดับบนสุดโดยตรงทั้งหมดจะปิดไลบรารีที่ส่งออกได้ ลองดูตัวอย่างที่แตกต่างกันเล็กน้อย: A ขึ้นอยู่กับ B ส่วน B ขึ้นอยู่กับ C และ D และส่งออก C ด้วย แต่ไม่ใช่ D ตอนนี้ A มีสิทธิ์เข้าถึง C แต่ไม่ใช่ D ในตอนนี้ หาก C และ D ส่งออกไลบรารีบางรายการ C' และ D' ตามลำดับ A จะเข้าถึงได้เฉพาะ C เท่านั้น แต่เข้าถึง D ไม่ได้

สำคัญ: กฎที่ส่งออกไม่ใช่ทรัพยากร Dependency ปกติ จากตัวอย่างก่อนหน้านี้ หาก B ส่งออก C และต้องการใช้ C ด้วย ก็จะต้องระบุไว้ใน deps ของตนเองด้วย

javabuilder_jvm_flags

รายการสตริง ค่าเริ่มต้นคือ []

จำกัด API อย่าใช้
javacopts

รายการสตริง ค่าเริ่มต้นคือ []

ตัวเลือกคอมไพเลอร์เพิ่มเติมสำหรับไลบรารีนี้ ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" และการแปลงข้อมูลเป็นโทเค็นของ Bourne shell

ระบบจะส่งตัวเลือกคอมไพเลอร์เหล่านี้ไปยัง Javac หลังตัวเลือกคอมไพเลอร์ส่วนกลาง

บูลีน ค่าเริ่มต้นคือ False

ควรใช้ไลบรารีนี้สำหรับการคอมไพล์เท่านั้นและไม่ใช่ระหว่างรันไทม์หรือไม่ มีประโยชน์หากสภาพแวดล้อมรันไทม์จัดเตรียมไลบรารีไว้ให้ระหว่างการดำเนินการ ตัวอย่างของไลบรารีดังกล่าว ได้แก่ IDE API สำหรับปลั๊กอิน IDE หรือ tools.jar สำหรับทุกสิ่งที่ทำงานบน JDK มาตรฐาน

โปรดทราบว่า neverlink = 1 ไม่ได้ป้องกันไม่ให้คอมไพเลอร์แทรกเนื้อหาจากไลบรารีนี้เป็นเป้าหมายการคอมไพล์ที่พึ่งพาเนื้อหาตามที่ได้รับอนุญาตโดยข้อกำหนดภาษาของ Java (เช่น ค่าคงที่ static final ของ String หรือประเภทพื้นฐาน) กรณีการใช้งานที่แนะนำคือเมื่อไลบรารีรันไทม์เหมือนกับไลบรารีการคอมไพล์

หากไลบรารีรันไทม์แตกต่างจากไลบรารีการคอมไพล์ คุณต้องตรวจสอบว่าไลบรารีดังกล่าวแตกต่างกันเฉพาะในตำแหน่งที่ JLS ห้ามไม่ให้คอมไพเลอร์แทรกในบรรทัด (และต้องมีการระงับสำหรับ JLS เวอร์ชันในอนาคตทั้งหมด)

plugins

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ปลั๊กอินคอมไพเลอร์ของ Java ที่จะเรียกใช้ในเวลาคอมไพล์ java_plugin ทุกรายการที่ระบุในแอตทริบิวต์นี้จะทำงานเมื่อมีการสร้างกฎนี้ ไลบรารีอาจรับค่าปลั๊กอินจากทรัพยากร Dependency ที่ใช้ exported_plugins ด้วย ทรัพยากรที่สร้างโดยปลั๊กอินจะรวมอยู่ในโหลที่เป็นผลลัพธ์ของกฎนี้
proguard_specs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไฟล์ที่จะใช้เป็นข้อมูลจำเพาะของ Proguard ซึ่งจะอธิบายชุดข้อกำหนดจำเพาะที่ Proguard จะใช้ หากระบุไว้ ระบบจะเพิ่มเป้าหมายไปยัง android_binary โดยอิงตามไลบรารีนี้ ไฟล์ที่รวมที่นี่ต้องมีเฉพาะกฎที่เป็นเอกลักษณ์เท่านั้น กล่าวคือ -dontnote, -dontwarn, assimenosideeffects และกฎที่ขึ้นต้นด้วย -keep ตัวเลือกอื่นๆ จะปรากฏใน proguard_specs ของ android_binary เท่านั้นเพื่อให้แน่ใจว่ามีการผสานที่ไม่ใช่ tautoological รวม
resource_strip_prefix

สตริง ค่าเริ่มต้นคือ ""

คำนำหน้าเส้นทางเพื่อตัดจากทรัพยากร Java

หากระบุ ระบบจะตัดคำนำหน้าเส้นทางนี้ออกจากทุกไฟล์ในแอตทริบิวต์ resources เป็นข้อผิดพลาดสำหรับไฟล์ทรัพยากรที่ไม่อยู่ในไดเรกทอรีนี้ หากไม่ระบุ (ค่าเริ่มต้น) ระบบจะกำหนดเส้นทางของไฟล์ทรัพยากรตามตรรกะเดียวกันกับแพ็กเกจ Java ของไฟล์ต้นฉบับ เช่น ไฟล์ต้นฉบับที่ stuff/java/foo/bar/a.txt จะอยู่ที่ foo/bar/a.txt

runtime_deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไลบรารีให้พร้อมใช้งานสำหรับไบนารีสุดท้ายหรือการทดสอบขณะรันไทม์เท่านั้น รายการเหล่านี้จะปรากฏใน classpath ของรันไทม์เช่นเดียวกับ deps ทั่วไป แต่จะไม่ปรากฏในคลาสพาธการคอมไพล์ การขึ้นต่อกันที่ต้องการเฉพาะรันไทม์ควรแสดงที่นี่ เครื่องมือวิเคราะห์การขึ้นต่อกันไม่ควรสนใจเป้าหมายที่ปรากฏทั้งใน runtime_deps และ deps

java_lite_proto_library

ดูแหล่งที่มาของกฎ
java_lite_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_lite_proto_library สร้างโค้ด Java จากไฟล์ .proto รายการ

deps ต้องชี้ไปที่กฎ proto_library

ตัวอย่าง


java_library(
    name = "lib",
    runtime_deps = [":foo"],
)

java_lite_proto_library(
    name = "foo",
    deps = [":bar"],
)

proto_library(
    name = "bar",
)

อาร์กิวเมนต์

Attributes
name

ต้องระบุชื่อ

ชื่อที่ไม่ซ้ำกันของเป้าหมายนี้

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการกฎ proto_library สำหรับสร้างโค้ด Java

java_proto_library

ดูแหล่งที่มาของกฎ
java_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_proto_library สร้างโค้ด Java จากไฟล์ .proto รายการ

deps ต้องชี้ไปที่กฎ proto_library

ตัวอย่าง


java_library(
    name = "lib",
    runtime_deps = [":foo_java_proto"],
)

java_proto_library(
    name = "foo_java_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

อาร์กิวเมนต์

Attributes
name

ต้องระบุชื่อ

ชื่อที่ไม่ซ้ำกันของเป้าหมายนี้

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการกฎ proto_library สำหรับสร้างโค้ด Java

java_test

ดูแหล่งที่มาของกฎ
java_test(name, deps, srcs, data, resources, add_exports, add_opens, args, bootclasspath, classpath_resources, compatible_with, create_executable, deploy_manifest_lines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, launcher, licenses, local, main_class, neverlink, plugins, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, use_testrunner, visibility)

กฎ java_test() จะรวมการทดสอบ Java การทดสอบคือ Wrapper ไบนารีรอบโค้ดทดสอบ ระบบจะเรียกใช้เมธอดหลักของตัวดำเนินการทดสอบแทนคลาสหลักที่คอมไพล์

เป้าหมายเอาต์พุตแบบไม่เจาะจงปลายทาง

  • name.jar: ที่เก็บถาวรสำหรับ Java
  • name_deploy.jar: ที่เก็บถาวรของ Java ที่เหมาะสำหรับการทำให้ใช้งานได้ (สร้างเมื่อขออย่างชัดแจ้งเท่านั้น) ดูรายละเอียดเพิ่มเติมได้จากคำอธิบายเอาต์พุต name_deploy.jar จาก java_binary

ดูส่วนเกี่ยวกับอาร์กิวเมนต์ java_binary() กฎนี้ยังรองรับแอตทริบิวต์ทั่วไปสำหรับกฎการทดสอบทั้งหมด (*_test) อีกด้วย

ตัวอย่าง



java_library(
    name = "tests",
    srcs = glob(["*.java"]),
    deps = [
        "//java/com/foo/base:testResources",
        "//java/com/foo/testing/util",
    ],
)

java_test(
    name = "AllTests",
    size = "small",
    runtime_deps = [
        ":tests",
        "//util/mysql",
    ],
)

อาร์กิวเมนต์

Attributes
name

ต้องระบุชื่อ

ชื่อที่ไม่ซ้ำกันของเป้าหมายนี้

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไลบรารีอื่นๆ ที่จะลิงก์กับเป้าหมาย ดูความคิดเห็นทั่วไปเกี่ยวกับ deps ได้ที่แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎการสร้างส่วนใหญ่
srcs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ต้นฉบับที่ประมวลผลเพื่อสร้างเป้าหมาย แอตทริบิวต์นี้แทบจะเป็นแอตทริบิวต์ที่จำเป็น โปรดดูข้อยกเว้นด้านล่าง

ระบบจะคอมไพล์ไฟล์ต้นฉบับประเภท .java แล้ว ในกรณีที่สร้างไฟล์ .java เราขอแนะนำให้ใส่ชื่อกฎที่สร้างที่นี่แทนชื่อไฟล์ วิธีนี้ไม่เพียงช่วยให้อ่านง่ายขึ้นเท่านั้น แต่ยังทำให้กฎมีความยืดหยุ่นต่อการเปลี่ยนแปลงในอนาคตมากขึ้นด้วย หากกฎที่สร้างขึ้นสร้างไฟล์อื่นในอนาคต คุณจะต้องแก้ไขเพียงที่เดียว นั่นคือ outs ของกฎที่สร้างขึ้น คุณไม่ควรระบุกฎที่สร้างใน deps เนื่องจากเป็นกฎที่ไม่มีการดำเนินการ

ไฟล์ต้นฉบับประเภท .srcjar จะถูกคลายการแพคและคอมไพล์แล้ว (วิธีนี้มีประโยชน์เมื่อคุณต้องสร้างชุดไฟล์ .java ที่มีกฎเกณฑ์)

กฎ: หากกฎ (โดยทั่วไปคือ genrule หรือ filegroup) สร้างไฟล์ใดก็ตามที่ระบุไว้ด้านบน ระบบจะใช้กฎดังกล่าวในวิธีเดียวกับที่อธิบายไว้ไฟล์ต้นฉบับ

อาร์กิวเมนต์นี้แทบจะจำเป็นเสมอ ยกเว้นในกรณีที่แอตทริบิวต์ main_class ระบุคลาสใน classpath รันไทม์ หรือคุณระบุอาร์กิวเมนต์ runtime_deps

data

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ที่ไลบรารีนี้ต้องการขณะรันไทม์ ดูความคิดเห็นทั่วไปเกี่ยวกับ data ได้ที่แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎการสร้างส่วนใหญ่
resources

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ข้อมูลที่จะใส่ใน Java jar

ทรัพยากรอาจเป็นไฟล์ต้นฉบับหรือไฟล์ที่สร้างขึ้น

หากระบุทรัพยากรแล้ว ระบบจะรวมทรัพยากรเหล่านั้นไว้ใน Jar พร้อมกับไฟล์ .class ปกติที่สร้างจากการคอมไพล์ ตำแหน่งของทรัพยากรภายในไฟล์ Jar จะกำหนดตามโครงสร้างโปรเจ็กต์ ก่อนอื่น Bazel จะมองหาเลย์เอาต์ไดเรกทอรีมาตรฐานของ Maven (ไดเรกทอรี "src" ตามด้วยไดเรกทอรี "resources" ระดับล่าง) หากไม่พบค่านี้ Bazel ก็จะมองหาไดเรกทอรีระดับบนสุดชื่อ "java" หรือ "javatests" (เช่น หากทรัพยากรอยู่ที่ <workspace root>/x/java/y/java/z เส้นทางของทรัพยากรจะเป็น y/java/z การเรียนรู้นี้จะลบล้างไม่ได้ แต่แอตทริบิวต์ resource_strip_prefix จะใช้เพื่อระบุไดเรกทอรีทางเลือกที่เจาะจงสำหรับไฟล์ทรัพยากรได้

add_exports

รายการสตริง ค่าเริ่มต้นคือ []

อนุญาตให้ไลบรารีนี้เข้าถึง module หรือ package ที่ระบุ

ซึ่งสอดคล้องกับแฟล็ก JavaScript และ JVM --add-exports=

add_opens

รายการสตริง ค่าเริ่มต้นคือ []

อนุญาตให้คลังนี้เข้าถึง module หรือ package ที่ระบุ

ซึ่งสอดคล้องกับแฟล็ก JavaScript และ JVM --add-opens=

bootclasspath

ป้ายกำกับ ค่าเริ่มต้นคือ None

จำกัด API อย่าใช้
classpath_resources

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

อย่าใช้ตัวเลือกนี้เว้นแต่จะเป็นเช่นนั้น)

รายการทรัพยากรที่ต้องอยู่ที่รากของ java Tree แอตทริบิวต์นี้มีไว้เพื่อรองรับไลบรารีของบุคคลที่สาม ซึ่งกำหนดให้ต้องค้นหาทรัพยากรในคลาสพาธเหมือนกับ "myconfig.xml" และใช้ได้เฉพาะในไบนารีเท่านั้น ไม่ใช่ไลบรารี เนื่องจากอันตรายจากความขัดแย้งของเนมสเปซ

create_executable

บูลีน ค่าเริ่มต้นคือ True

เลิกใช้งานแล้ว โปรดใช้ java_single_jar แทน
deploy_manifest_lines

รายการสตริง ค่าเริ่มต้นคือ []

รายการบรรทัดที่จะเพิ่มลงในไฟล์ META-INF/manifest.mf ที่สร้างขึ้นสำหรับเป้าหมาย *_deploy.jar เนื้อหาของแอตทริบิวต์นี้ไม่อยู่ภายใต้การแทนที่ "สร้างตัวแปร"
javacopts

รายการสตริง ค่าเริ่มต้นคือ []

ตัวเลือกคอมไพเลอร์พิเศษสำหรับไบนารีนี้ ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" และการแปลงข้อมูลเป็นโทเค็นของ Bourne shell

ระบบจะส่งตัวเลือกคอมไพเลอร์เหล่านี้ไปยัง Javac หลังตัวเลือกคอมไพเลอร์ส่วนกลาง

jvm_flags

รายการสตริง ค่าเริ่มต้นคือ []

รายการแฟล็กที่จะฝังในสคริปต์ Wrapper ที่สร้างขึ้นสำหรับการเรียกใช้ไบนารีนี้ อยู่ภายใต้การแทนที่ $(location) และ "Makeตัวแปร" และ การแปลงข้อมูลเป็นโทเค็นของ Bourne shell

สคริปต์ Wrapper สำหรับไบนารีของ Java มีคําจํากัดความ CLASSPATH (เพื่อค้นหา Jar ที่ไม่เป็นอิสระทั้งหมด) และเรียกใช้ล่าม Java ที่ถูกต้อง บรรทัดคำสั่งที่สร้างโดยสคริปต์ Wrapper จะมีชื่อของคลาสหลักตามด้วย "$@" เพื่อให้คุณส่งต่ออาร์กิวเมนต์อื่นๆ หลังชื่อคลาสได้ อย่างไรก็ตาม คุณต้องระบุอาร์กิวเมนต์ที่มีไว้เพื่อแยกวิเคราะห์โดย JVM ก่อนชื่อคลาสในบรรทัดคำสั่ง เนื้อหาของ jvm_flags จะเพิ่มลงในสคริปต์ Wrapper ก่อนที่ชื่อคลาสจะแสดง

โปรดทราบว่าแอตทริบิวต์นี้ไม่มีผลกับเอาต์พุต *_deploy.jar

launcher

ป้ายกำกับ ค่าเริ่มต้นคือ None

ระบุไบนารีที่จะใช้ในการเรียกใช้โปรแกรม Java แทนโปรแกรม bin/java ปกติที่มาพร้อมกับ JDK เป้าหมายต้องเป็น cc_binary คุณระบุ cc_binary ที่ใช้ Java Invocation API เป็นค่าสำหรับแอตทริบิวต์นี้ได้

โดยค่าเริ่มต้น Bazel จะใช้ JDK Launcher ปกติ (bin/java หรือ java.exe)

แฟล็ก --java_launcher Bazel ที่เกี่ยวข้องมีผลเฉพาะกับเป้าหมาย java_binary และ java_test ที่ไม่ได้ระบุแอตทริบิวต์ launcher เท่านั้น

โปรดทราบว่าทรัพยากร Dependency (C++, SWIG, JNI) จะสร้างขึ้นต่างออกไป ขึ้นอยู่กับว่าคุณใช้ JDK Launcher หรือ Launcher อื่น

  • หากคุณใช้ JDK Launcher ปกติ (ค่าเริ่มต้น) ทรัพยากร Dependency แบบเนทีฟจะสร้างขึ้นเป็นไลบรารีที่ใช้ร่วมกันชื่อ {name}_nativedeps.so โดยที่ {name} คือแอตทริบิวต์ name ของกฎ java_binary นี้ ตัวลิงก์จะไม่นำโค้ดที่ไม่ได้ใช้ออกในการกำหนดค่านี้
  • หากคุณใช้ Launcher อื่น ทรัพยากร Dependency (C++) จะลิงก์แบบคงที่กับไบนารีชื่อ {name}_nativedeps โดยที่ {name} คือแอตทริบิวต์ name ของกฎ java_binary นี้ ในกรณีนี้ Linker จะนำโค้ดที่คิดว่าไม่ได้ใช้ออกจากไบนารีที่ได้ ซึ่งหมายความว่าจะไม่มีการลิงก์โค้ด C++ ที่เข้าถึงผ่าน JNI เท่านั้น เว้นแต่เป้าหมาย cc_library จะระบุ alwayslink = 1

เมื่อใช้ Launcher ใดก็ตามนอกเหนือจาก JDK Launcher เริ่มต้น รูปแบบของเอาต์พุต *_deploy.jar จะเปลี่ยนไป ดูรายละเอียดในเอกสาร java_binary หลัก

main_class

สตริง ค่าเริ่มต้นคือ ""

ชื่อคลาสที่มีเมธอด main() เพื่อใช้เป็นจุดแรกเข้า หากกฎใช้ตัวเลือกนี้ จะไม่จำเป็นต้องมีรายการ srcs=[...] ดังนั้น แอตทริบิวต์นี้จะสร้างไฟล์ปฏิบัติการจากไลบรารี Java ที่มีเมธอด main() อย่างน้อย 1 ได้อยู่แล้ว

ค่าของแอตทริบิวต์นี้เป็นชื่อคลาส ไม่ใช่ไฟล์ต้นฉบับ คลาสต้องพร้อมใช้งานขณะรันไทม์: อาจคอมไพล์โดยกฎนี้ (จาก srcs) หรือกำหนดขึ้นโดยทรัพยากร Dependency โดยตรงหรือทรัพยากร Dependency (ผ่าน runtime_deps หรือ deps) หากคลาสไม่พร้อมใช้งาน ไบนารีจะล้มเหลวขณะรันไทม์ และไม่มีการตรวจสอบเวลาบิลด์

บูลีน ค่าเริ่มต้นคือ False

plugins

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ปลั๊กอินคอมไพเลอร์ของ Java ที่จะเรียกใช้ในเวลาคอมไพล์ java_plugin ทุกรายการที่ระบุในแอตทริบิวต์นี้จะทำงานเมื่อมีการสร้างกฎนี้ ไลบรารีอาจรับค่าปลั๊กอินจากทรัพยากร Dependency ที่ใช้ exported_plugins ด้วย ทรัพยากรที่สร้างโดยปลั๊กอินจะรวมอยู่ในโหลที่เป็นผลลัพธ์ของกฎนี้
resource_strip_prefix

สตริง ค่าเริ่มต้นคือ ""

คำนำหน้าเส้นทางเพื่อตัดจากทรัพยากร Java

หากระบุ ระบบจะตัดคำนำหน้าเส้นทางนี้ออกจากทุกไฟล์ในแอตทริบิวต์ resources เป็นข้อผิดพลาดสำหรับไฟล์ทรัพยากรที่ไม่อยู่ในไดเรกทอรีนี้ หากไม่ระบุ (ค่าเริ่มต้น) ระบบจะกำหนดเส้นทางของไฟล์ทรัพยากรตามตรรกะเดียวกันกับแพ็กเกจ Java ของไฟล์ต้นฉบับ เช่น ไฟล์ต้นฉบับที่ stuff/java/foo/bar/a.txt จะอยู่ที่ foo/bar/a.txt

runtime_deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไลบรารีให้พร้อมใช้งานสำหรับไบนารีสุดท้ายหรือการทดสอบขณะรันไทม์เท่านั้น รายการเหล่านี้จะปรากฏใน classpath ของรันไทม์เช่นเดียวกับ deps ทั่วไป แต่จะไม่ปรากฏในคลาสพาธการคอมไพล์ การขึ้นต่อกันที่ต้องการเฉพาะรันไทม์ควรแสดงที่นี่ เครื่องมือวิเคราะห์การขึ้นต่อกันไม่ควรสนใจเป้าหมายที่ปรากฏทั้งใน runtime_deps และ deps
stamp

จำนวนเต็ม ค่าเริ่มต้นคือ 0

จะเข้ารหัสข้อมูลของบิลด์ลงในไบนารีไหม ค่าที่เป็นไปได้มีดังนี้
  • stamp = 1: ประทับข้อมูลบิลด์ลงในไบนารีเสมอ แม้แต่ในบิลด์ --nostamp ก็ตาม ควรหลีกเลี่ยงการตั้งค่านี้ เนื่องจากอาจทำให้การแคชระยะไกลสำหรับไบนารีและการดำเนินการดาวน์สตรีมที่ต้องใช้การตั้งค่าดังกล่าวไม่ทำงาน
  • stamp = 0: แทนที่ข้อมูลของบิลด์ด้วยค่าคงที่เสมอ ซึ่งจะช่วยให้มีการแคชผลลัพธ์ของบิลด์ที่ดี
  • stamp = -1: การฝังข้อมูลของบิลด์ควบคุมด้วยแฟล็ก --[no]stamp

ไบนารีที่ประทับตราจะไม่ได้รับการสร้างขึ้นใหม่เว้นแต่จะมีการเปลี่ยนแปลงทรัพยากร Dependency

test_class

สตริง ค่าเริ่มต้นคือ ""

คลาส Java จะโหลดโดยตัวดำเนินการทดสอบ

โดยค่าเริ่มต้น หากไม่ได้กำหนดอาร์กิวเมนต์นี้ ระบบจะใช้โหมดเดิมและจะใช้อาร์กิวเมนต์ทดสอบแทน ตั้งค่าแฟล็ก --nolegacy_bazel_java_test เป็นไม่ให้สำรองในอาร์กิวเมนต์แรก

แอตทริบิวต์นี้ระบุชื่อของคลาส Java ที่จะเรียกใช้โดยการทดสอบนี้ ไม่ค่อยมีคนต้องตั้งค่า หากละเว้นอาร์กิวเมนต์นี้ ระบบจะอนุมานโดยใช้ name ของเป้าหมายและเส้นทางสัมพัทธ์กับรูทของต้นทาง หากการทดสอบอยู่นอกรูทต้นทางที่รู้จัก Bazel จะรายงานข้อผิดพลาดหากไม่ได้ตั้งค่า test_class

สำหรับ JUnit3 คลาสการทดสอบจะต้องเป็นคลาสย่อยของ junit.framework.TestCase หรือต้องมีเมธอด suite() แบบคงที่แบบสาธารณะที่แสดงผล junit.framework.Test (หรือคลาสย่อย Test) สำหรับ JUnit4 จะต้องใส่คำอธิบายประกอบคลาสด้วย org.junit.runner.RunWith

แอตทริบิวต์นี้ช่วยให้กฎ java_test หลายข้อแชร์ Test เดียวกันได้ (TestCase, TestSuite, ...) โดยปกติแล้วจะมีการส่งข้อมูลเพิ่มเติมไปยังแอตทริบิวต์ดังกล่าว (เช่น ผ่าน jvm_flags=['-Dkey=value']) เพื่อให้การทำงานของกฎแตกต่างกันไปในแต่ละกรณี เช่น เรียกใช้ชุดย่อยที่แตกต่างกันของการทดสอบ แอตทริบิวต์นี้ยังทำให้ใช้การทดสอบ Java นอกโครงสร้าง javatests ได้ด้วย

use_launcher

บูลีน ค่าเริ่มต้นคือ True

ไบนารีควรใช้ Launcher ที่กำหนดเองหรือไม่

หากตั้งค่าแอตทริบิวต์นี้เป็น "เท็จ" ระบบจะไม่สนใจแอตทริบิวต์ launcher และแฟล็ก --java_launcher ที่เกี่ยวข้องสำหรับเป้าหมายนี้

use_testrunner

บูลีน ค่าเริ่มต้นคือ True

ใช้คลาสตัวดำเนินการทดสอบ (โดยค่าเริ่มต้น com.google.testing.junit.runner.BazelTestRunner) เป็นจุดแรกเข้าหลักสำหรับโปรแกรม Java และระบุคลาสการทดสอบให้กับตัวดำเนินการทดสอบเป็นค่าของพร็อพเพอร์ตี้ระบบ bazel.test_suite
ซึ่งใช้เพื่อลบล้างลักษณะการทำงานเริ่มต้นได้ ซึ่งก็คือการใช้ตัวดำเนินการทดสอบสำหรับกฎ java_test รายการ และไม่ใช้กับกฎ java_binary รายการ เป็นไปได้ยากว่าคุณต้องทำเช่นนี้ การใช้งานแบบหนึ่งคือสำหรับกฎ AllTest ที่เรียกใช้โดยกฎอื่น (เช่น เพื่อตั้งค่าฐานข้อมูลก่อนทำการทดสอบ) คุณต้องประกาศกฎ AllTest เป็น java_binary แต่ยังคงใช้ตัวดำเนินการทดสอบเป็นจุดแรกเข้าหลัก ชื่อของคลาสตัวดำเนินการทดสอบลบล้างได้ด้วยแอตทริบิวต์ main_class

java_package_configuration

ดูแหล่งที่มาของกฎ
java_package_configuration(name, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, javacopts, output_licenses, packages, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

การกําหนดค่าที่จะนำไปใช้กับชุดแพ็กเกจ คุณจะเพิ่มการกำหนดค่าไปยัง java_toolchain.javacopts ได้

ตัวอย่าง



java_package_configuration(
    name = "my_configuration",
    packages = [":my_packages"],
    javacopts = ["-Werror"],
)

package_group(
    name = "my_packages",
    packages = [
        "//com/my/project/...",
        "-//com/my/project/testing/...",
    ],
)

java_toolchain(
    ...,
    package_configuration = [
        ":my_configuration",
    ]
)


อาร์กิวเมนต์

Attributes
name

ต้องระบุชื่อ

ชื่อที่ไม่ซ้ำกันของเป้าหมายนี้

data

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ที่การกำหนดค่านี้ต้องใช้ขณะรันไทม์
javacopts

รายการสตริง ค่าเริ่มต้นคือ []

แฟล็กคอมไพเลอร์ Java
output_licenses

รายการสตริง ค่าเริ่มต้นคือ []

packages

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ชุดของ package_group ควรใช้การกำหนดค่า

java_plugin

ดูแหล่งที่มาของกฎ
java_plugin(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, generates_api, javabuilder_jvm_flags, javacopts, licenses, neverlink, output_licenses, plugins, processor_class, proguard_specs, resource_strip_prefix, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_plugin กำหนดปลั๊กอินสำหรับคอมไพเลอร์ Java ที่ Bazel เรียกใช้ ขณะนี้ ปลั๊กอินประเภทเดียวที่รองรับคือตัวประมวลผลคำอธิบายประกอบ กฎ java_library หรือ java_binary จะเรียกใช้ปลั๊กอินได้โดยขึ้นอยู่กับปลั๊กอินดังกล่าวผ่านแอตทริบิวต์ plugins java_library ยังส่งออกปลั๊กอินไปยังไลบรารีที่อาศัยปลั๊กอินดังกล่าวโดยตรงได้โดยอัตโนมัติโดยใช้ exported_plugins

เป้าหมายเอาต์พุตแบบไม่เจาะจงปลายทาง

  • libname.jar: ที่เก็บถาวรสำหรับ Java

อาร์กิวเมนต์เหมือนกับ java_library ยกเว้นการเพิ่มอาร์กิวเมนต์ processor_class

อาร์กิวเมนต์

Attributes
name

ต้องระบุชื่อ

ชื่อที่ไม่ซ้ำกันของเป้าหมายนี้

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายชื่อไลบรารีที่จะลิงก์เข้าสู่ไลบรารีนี้ ดูความคิดเห็นทั่วไปเกี่ยวกับ deps ได้ที่แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎการสร้างส่วนใหญ่

Jars ที่สร้างโดยกฎ java_library ที่ระบุไว้ใน deps จะอยู่ในคลาสพาธเวลาคอมไพล์ของกฎนี้ นอกจากนี้ การปิดทางอ้อมของ deps, runtime_deps และ exports จะอยู่ในคลาสพาธรันไทม์

ในทางตรงกันข้าม เป้าหมายในแอตทริบิวต์ data จะรวมอยู่ใน Runfile แต่ไม่ใช่ทั้งคลาสคอมไพล์และคลาสพาธรันไทม์

srcs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ต้นฉบับที่ประมวลผลเพื่อสร้างเป้าหมาย แอตทริบิวต์นี้แทบจะเป็นแอตทริบิวต์ที่จำเป็น โปรดดูข้อยกเว้นด้านล่าง

ระบบจะคอมไพล์ไฟล์ต้นฉบับประเภท .java แล้ว ในกรณีที่สร้างไฟล์ .java เราขอแนะนำให้ใส่ชื่อกฎที่สร้างที่นี่แทนชื่อไฟล์ วิธีนี้ไม่เพียงช่วยให้อ่านง่ายขึ้นเท่านั้น แต่ยังทำให้กฎมีความยืดหยุ่นต่อการเปลี่ยนแปลงในอนาคตมากขึ้นด้วย หากกฎที่สร้างขึ้นสร้างไฟล์อื่นในอนาคต คุณจะต้องแก้ไขเพียงที่เดียว นั่นคือ outs ของกฎที่สร้างขึ้น คุณไม่ควรระบุกฎที่สร้างใน deps เนื่องจากเป็นกฎที่ไม่มีการดำเนินการ

ไฟล์ต้นฉบับประเภท .srcjar จะถูกคลายการแพคและคอมไพล์แล้ว (วิธีนี้มีประโยชน์เมื่อคุณต้องสร้างชุดไฟล์ .java ที่มีกฎเกณฑ์)

กฎ: หากกฎ (โดยทั่วไปคือ genrule หรือ filegroup) สร้างไฟล์ใดก็ตามที่ระบุไว้ด้านบน ระบบจะใช้กฎดังกล่าวในวิธีเดียวกับที่อธิบายไว้ไฟล์ต้นฉบับ

ไฟล์ต้นฉบับประเภท .properties จะถือว่าเป็นทรัพยากร

ระบบจะไม่สนใจไฟล์อื่นๆ ทั้งหมด ตราบใดที่มีประเภทไฟล์ดังที่อธิบายไว้ข้างต้นอย่างน้อย 1 ไฟล์ มิฉะนั้นระบบจะแสดงข้อผิดพลาด

อาร์กิวเมนต์นี้แทบจะจำเป็นเสมอ ยกเว้นในกรณีที่คุณระบุอาร์กิวเมนต์ runtime_deps

data

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ที่ไลบรารีนี้ต้องการขณะรันไทม์ ดูความคิดเห็นทั่วไปเกี่ยวกับ data ได้ที่แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎการสร้างส่วนใหญ่

เมื่อสร้าง java_library Bazel จะไม่นำไฟล์เหล่านี้ไปวางไว้ที่ใดๆ หากไฟล์ data เป็นไฟล์ Bazel จะสร้างขึ้นมา เมื่อสร้างการทดสอบที่ขึ้นอยู่กับ java_library Bazel นี้คัดลอกหรือลิงก์ไฟล์ data เข้ากับพื้นที่ Runfile

resources

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ข้อมูลที่จะใส่ใน Java jar

ทรัพยากรอาจเป็นไฟล์ต้นฉบับหรือไฟล์ที่สร้างขึ้น

หากระบุทรัพยากรแล้ว ระบบจะรวมทรัพยากรเหล่านั้นไว้ใน Jar พร้อมกับไฟล์ .class ปกติที่สร้างจากการคอมไพล์ ตำแหน่งของทรัพยากรภายในไฟล์ Jar จะกำหนดตามโครงสร้างโปรเจ็กต์ ก่อนอื่น Bazel จะมองหาเลย์เอาต์ไดเรกทอรีมาตรฐานของ Maven (ไดเรกทอรี "src" ตามด้วยไดเรกทอรี "resources" ระดับล่าง) หากไม่พบค่านี้ Bazel ก็จะมองหาไดเรกทอรีระดับบนสุดชื่อ "java" หรือ "javatests" (เช่น หากทรัพยากรอยู่ที่ <workspace root>/x/java/y/java/z เส้นทางของทรัพยากรจะเป็น y/java/z การเรียนรู้นี้จะลบล้างไม่ได้ แต่แอตทริบิวต์ resource_strip_prefix จะใช้เพื่อระบุไดเรกทอรีทางเลือกที่เจาะจงสำหรับไฟล์ทรัพยากรได้

add_exports

รายการสตริง ค่าเริ่มต้นคือ []

อนุญาตให้ไลบรารีนี้เข้าถึง module หรือ package ที่ระบุ

ซึ่งสอดคล้องกับแฟล็ก JavaScript และ JVM --add-exports=

add_opens

รายการสตริง ค่าเริ่มต้นคือ []

อนุญาตให้คลังนี้เข้าถึง module หรือ package ที่ระบุ

ซึ่งสอดคล้องกับแฟล็ก JavaScript และ JVM --add-opens=

bootclasspath

ป้ายกำกับ ค่าเริ่มต้นคือ None

จำกัด API อย่าใช้
generates_api

บูลีน ค่าเริ่มต้นคือ False

แอตทริบิวต์นี้ทำเครื่องหมายตัวประมวลผลคำอธิบายประกอบที่สร้างโค้ด API

หากกฎใช้โปรเซสเซอร์คำอธิบายประกอบที่สร้าง API กฎอื่นๆ จะขึ้นอยู่กับกฎดังกล่าวจะอ้างอิงโค้ดที่สร้างขึ้นก็ต่อเมื่อมีการกำหนดเวลาการดำเนินการคอมไพล์หลังกฎที่สร้างขึ้นเท่านั้น แอตทริบิวต์นี้บอกให้ Bazel เพิ่มข้อจำกัดการกำหนดเวลาเมื่อเปิดใช้ --java_header_compilation

คำเตือน: แอตทริบิวต์นี้มีผลต่อประสิทธิภาพของบิลด์ ใช้เมื่อจำเป็นเท่านั้น

javabuilder_jvm_flags

รายการสตริง ค่าเริ่มต้นคือ []

จำกัด API อย่าใช้
javacopts

รายการสตริง ค่าเริ่มต้นคือ []

ตัวเลือกคอมไพเลอร์เพิ่มเติมสำหรับไลบรารีนี้ ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" และการแปลงข้อมูลเป็นโทเค็นของ Bourne shell

ระบบจะส่งตัวเลือกคอมไพเลอร์เหล่านี้ไปยัง Javac หลังตัวเลือกคอมไพเลอร์ส่วนกลาง

บูลีน ค่าเริ่มต้นคือ False

ควรใช้ไลบรารีนี้สำหรับการคอมไพล์เท่านั้นและไม่ใช่ระหว่างรันไทม์หรือไม่ มีประโยชน์หากสภาพแวดล้อมรันไทม์จัดเตรียมไลบรารีไว้ให้ระหว่างการดำเนินการ ตัวอย่างของไลบรารีดังกล่าว ได้แก่ IDE API สำหรับปลั๊กอิน IDE หรือ tools.jar สำหรับทุกสิ่งที่ทำงานบน JDK มาตรฐาน

โปรดทราบว่า neverlink = 1 ไม่ได้ป้องกันไม่ให้คอมไพเลอร์แทรกเนื้อหาจากไลบรารีนี้เป็นเป้าหมายการคอมไพล์ที่พึ่งพาเนื้อหาตามที่ได้รับอนุญาตโดยข้อกำหนดภาษาของ Java (เช่น ค่าคงที่ static final ของ String หรือประเภทพื้นฐาน) กรณีการใช้งานที่แนะนำคือเมื่อไลบรารีรันไทม์เหมือนกับไลบรารีการคอมไพล์

หากไลบรารีรันไทม์แตกต่างจากไลบรารีการคอมไพล์ คุณต้องตรวจสอบว่าไลบรารีดังกล่าวแตกต่างกันเฉพาะในตำแหน่งที่ JLS ห้ามไม่ให้คอมไพเลอร์แทรกในบรรทัด (และต้องมีการระงับสำหรับ JLS เวอร์ชันในอนาคตทั้งหมด)

output_licenses

รายการสตริง ค่าเริ่มต้นคือ []

plugins

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ปลั๊กอินคอมไพเลอร์ของ Java ที่จะเรียกใช้ในเวลาคอมไพล์ java_plugin ทุกรายการที่ระบุในแอตทริบิวต์นี้จะทำงานเมื่อมีการสร้างกฎนี้ ไลบรารีอาจรับค่าปลั๊กอินจากทรัพยากร Dependency ที่ใช้ exported_plugins ด้วย ทรัพยากรที่สร้างโดยปลั๊กอินจะรวมอยู่ในโหลที่เป็นผลลัพธ์ของกฎนี้
processor_class

สตริง ค่าเริ่มต้นคือ ""

คลาสตัวประมวลผลเป็นประเภทที่มีคุณสมบัติครบถ้วนของคลาสที่คอมไพเลอร์ Java ควรใช้เป็นจุดแรกเข้าของตัวประมวลผลคำอธิบายประกอบ หากไม่ได้ระบุ กฎนี้จะไม่ส่งตัวประมวลผลคำอธิบายประกอบไปยังการประมวลผลคำอธิบายประกอบของคอมไพเลอร์ Java แต่คลาสพาธรันไทม์จะยังรวมอยู่ในเส้นทางตัวประมวลผลคำอธิบายประกอบของคอมไพเลอร์ (มีจุดประสงค์หลักเพื่อการใช้งานโดยปลั๊กอินข้อผิดพลาด Prone ซึ่งโหลดจากเส้นทางตัวประมวลผลคำอธิบายประกอบโดยใช้ java.util.ServiceLoader)
proguard_specs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไฟล์ที่จะใช้เป็นข้อมูลจำเพาะของ Proguard ซึ่งจะอธิบายชุดข้อกำหนดจำเพาะที่ Proguard จะใช้ หากระบุไว้ ระบบจะเพิ่มเป้าหมายไปยัง android_binary โดยอิงตามไลบรารีนี้ ไฟล์ที่รวมที่นี่ต้องมีเฉพาะกฎที่เป็นเอกลักษณ์เท่านั้น กล่าวคือ -dontnote, -dontwarn, assimenosideeffects และกฎที่ขึ้นต้นด้วย -keep ตัวเลือกอื่นๆ จะปรากฏใน proguard_specs ของ android_binary เท่านั้นเพื่อให้แน่ใจว่ามีการผสานที่ไม่ใช่ tautoological รวม
resource_strip_prefix

สตริง ค่าเริ่มต้นคือ ""

คำนำหน้าเส้นทางเพื่อตัดจากทรัพยากร Java

หากระบุ ระบบจะตัดคำนำหน้าเส้นทางนี้ออกจากทุกไฟล์ในแอตทริบิวต์ resources เป็นข้อผิดพลาดสำหรับไฟล์ทรัพยากรที่ไม่อยู่ในไดเรกทอรีนี้ หากไม่ระบุ (ค่าเริ่มต้น) ระบบจะกำหนดเส้นทางของไฟล์ทรัพยากรตามตรรกะเดียวกันกับแพ็กเกจ Java ของไฟล์ต้นฉบับ เช่น ไฟล์ต้นฉบับที่ stuff/java/foo/bar/a.txt จะอยู่ที่ foo/bar/a.txt

java_runtime

ดูแหล่งที่มาของกฎ
java_runtime(name, srcs, compatible_with, default_cds, deprecation, distribs, exec_compatible_with, exec_properties, features, hermetic_srcs, hermetic_static_libs, java, java_home, lib_ct_sym, lib_modules, output_licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, version, visibility)

ระบุการกำหนดค่าสำหรับรันไทม์ของ Java

ตัวอย่าง



java_runtime(
    name = "jdk-9-ea+153",
    srcs = glob(["jdk9-ea+153/**"]),
    java_home = "jdk9-ea+153",
)


อาร์กิวเมนต์

Attributes
name

ต้องระบุชื่อ

ชื่อที่ไม่ซ้ำกันของเป้าหมายนี้

srcs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไฟล์ทั้งหมดในรันไทม์
default_cds

ป้ายกำกับ ค่าเริ่มต้นคือ None

ที่เก็บถาวร CDS เริ่มต้นสำหรับ java_runtime เมื่อเปิดใช้โหมด Hermetic กับเป้าหมาย java_binary และหากเป้าหมายไม่ได้ระบุที่เก็บ CDS ของตัวเองโดยการระบุแอตทริบิวต์ classlist ระบบจะรวม java_runtime CDS เริ่มต้นไว้ใน JAR แบบทำให้ใช้งานได้ที่เป็นส่วนตัว
hermetic_srcs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไฟล์ขณะรันไทม์ที่จำเป็นสำหรับการติดตั้งใช้งานที่ต่างไปจากเดิม
hermetic_static_libs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไลบรารีที่เชื่อมโยงแบบคงที่กับ Launcher เพื่อการติดตั้งใช้งานที่ต่างไปจากเดิม
java

ป้ายกำกับ ค่าเริ่มต้นคือ None

เส้นทางไปยังไฟล์ปฏิบัติการ Java
java_home

สตริง ค่าเริ่มต้นคือ ""

เส้นทางไปยังรูทของรันไทม์ มีการใช้ตัวแปร"Make" แทน หากเส้นทางนี้สมบูรณ์ กฎจะหมายถึงรันไทม์ของ Java ที่ไม่ใช่แบบเต็มรูปแบบของเส้นทางซึ่งเป็นที่รู้จักกันดี ในกรณีนี้ แอตทริบิวต์ srcs และ java ต้องว่างเปล่า
lib_ct_sym

ป้ายกำกับ ค่าเริ่มต้นคือ None

ไฟล์ lib/ct.sym ที่จำเป็นสำหรับการคอมไพล์ด้วย --release หากไม่ได้ระบุไว้และมีไฟล์เดียวใน srcs ซึ่งมีเส้นทางลงท้ายด้วย /lib/ct.sym ระบบจะใช้ไฟล์นั้น
lib_modules

ป้ายกำกับ ค่าเริ่มต้นคือ None

ไฟล์ lib/modules ที่จำเป็นสำหรับการติดตั้งใช้งานที่ไม่มีการใช้งาน
output_licenses

รายการสตริง ค่าเริ่มต้นคือ []

version

จำนวนเต็ม ค่าเริ่มต้นคือ 0

เวอร์ชันฟีเจอร์ของรันไทม์ของ Java นั่นคือ จำนวนเต็มที่แสดงผลโดย Runtime.version().feature()

java_toolchain

ดูแหล่งที่มาของกฎ
java_toolchain(name, android_lint_data, android_lint_jvm_opts, android_lint_opts, android_lint_package_configuration, android_lint_runner, bootclasspath, compatible_javacopts, compatible_with, deprecation, deps_checker, distribs, exec_compatible_with, exec_properties, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_builtin_processors, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_worker_cancellation, javac_supports_worker_multiplex_sandboxing, javac_supports_workers, javacopts, jspecify_implicit_deps, jspecify_javacopts, jspecify_packages, jspecify_processor, jspecify_processor_class, jspecify_stubs, jvm_opts, licenses, misc, oneversion, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, proguard_allowlister, reduced_classpath_incompatible_processors, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, toolchains, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

ระบุการกำหนดค่าสำหรับคอมไพเลอร์ Java เชนเครื่องมือที่จะใช้เปลี่ยนแปลงได้ผ่านอาร์กิวเมนต์ --java_toolchain โดยปกติคุณไม่ควรเขียนกฎแบบนั้นเว้นแต่ต้องการปรับแต่งคอมไพเลอร์ Java

ตัวอย่าง

ตัวอย่างง่ายๆ ได้แก่



java_toolchain(
    name = "toolchain",
    source_version = "7",
    target_version = "7",
    bootclasspath = ["//tools/jdk:bootclasspath"],
    xlint = [ "classfile", "divzero", "empty", "options", "path" ],
    javacopts = [ "-g" ],
    javabuilder = ":JavaBuilder_deploy.jar",
)

อาร์กิวเมนต์

Attributes
name

ต้องระบุชื่อ

ชื่อที่ไม่ซ้ำกันของเป้าหมายนี้

android_lint_data

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ป้ายกำกับเครื่องมือที่มีให้สำหรับการขยายป้ายกำกับใน android_lint_jvm_opts
android_lint_jvm_opts

รายการสตริง ค่าเริ่มต้นคือ []

รายการอาร์กิวเมนต์สำหรับ JVM เมื่อเรียกใช้ Android Lint
android_lint_opts

รายการสตริง ค่าเริ่มต้นคือ []

รายการอาร์กิวเมนต์ Android Lint
android_lint_package_configuration

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

การกำหนดค่า Android Lint ที่ควรนำไปใช้กับกลุ่มแพ็กเกจที่ระบุ
android_lint_runner

ป้ายกำกับ ค่าเริ่มต้นคือ None

ป้ายกำกับของตัวเรียกใช้ Android Lint หากมี
bootclasspath

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการ Bootclasspath เป้าหมายของ Java สอดคล้องกับแฟล็ก -bootclasspath ของ javac
compatible_javacopts

null; default is {}

API ภายใน อย่าใช้
deps_checker

ป้ายกำกับ ค่าเริ่มต้นคือ None

ป้ายกำกับของ Jar ที่ติดตั้งใช้งาน ImportDepsChecker
forcibly_disable_header_compilation

บูลีน ค่าเริ่มต้นคือ False

ลบล้าง --java_header_compilation เพื่อปิดใช้การรวมส่วนหัวบนแพลตฟอร์มที่ไม่รองรับ เช่น JDK 7 Bazel
genclass

ป้ายกำกับ ค่าเริ่มต้นคือ None

ป้ายกำกับของ Jar ทำให้ใช้งานได้ของ GenClass
header_compiler

ป้ายกำกับ ค่าเริ่มต้นคือ None

ป้ายกำกับของคอมไพเลอร์ส่วนหัว ต้องระบุหากเปิดใช้ --java_header_compilation
header_compiler_builtin_processors

รายการสตริง ค่าเริ่มต้นคือ []

API ภายใน อย่าใช้
header_compiler_direct

ป้ายกำกับ ค่าเริ่มต้นคือ None

ป้ายกำกับที่ไม่บังคับของคอมไพเลอร์ส่วนหัวที่จะใช้สำหรับการดำเนินการของคลาสพาธโดยตรงที่ไม่มีตัวประมวลผลคำอธิบายประกอบที่สร้าง API

เครื่องมือนี้ไม่รองรับการประมวลผลคำอธิบายประกอบ

ijar

ป้ายกำกับ ค่าเริ่มต้นคือ None

ป้ายกำกับปฏิบัติการของ Jar
jacocorunner

ป้ายกำกับ ค่าเริ่มต้นคือ None

ป้ายกำกับของ Jacocoขยายการเข้าถึงRunner สำหรับติดตั้งใช้งาน
java_runtime

ป้ายกำกับ ค่าเริ่มต้นคือ None

java_runtime ที่จะใช้กับเครื่องมือเชนนี้ โดยมีค่าเริ่มต้นเป็น java_runtime ในการกำหนดค่าการดำเนินการ
javabuilder

ป้ายกำกับ ค่าเริ่มต้นคือ None

ป้ายกำกับของ Jar ที่ติดตั้งใช้งาน JavaBuilder
javabuilder_data

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ป้ายกำกับของข้อมูลที่สามารถขยายป้ายกำกับใน javabuilder_jvm_opts
javabuilder_jvm_opts

รายการสตริง ค่าเริ่มต้นคือ []

รายการอาร์กิวเมนต์สำหรับ JVM เมื่อเรียกใช้ JavaBuilder
javac_supports_multiplex_workers

บูลีน ค่าเริ่มต้นคือ True

เป็นจริงหาก JavaBuilder รองรับการเรียกใช้เป็นผู้ปฏิบัติงานถาวร Multiplex และเป็นเท็จในกรณีที่ไม่รองรับ
javac_supports_worker_cancellation

บูลีน ค่าเริ่มต้นคือ True

เป็นจริงหาก JavaBuilder รองรับการยกเลิกผู้ปฏิบัติงานถาวร เท็จหากไม่รองรับ
javac_supports_worker_multiplex_sandboxing

บูลีน ค่าเริ่มต้นคือ False

เป็นจริงหาก JavaBuilder สนับสนุนการทำงานเป็นผู้ปฏิบัติงานถาวรแบบมัลติเพล็กซ์ด้วยแซนด์บ็อกซ์ และเป็นเท็จ หากไม่รองรับ
javac_supports_workers

บูลีน ค่าเริ่มต้นคือ True

เป็นจริงหาก JavaBuilder สนับสนุนการทำงานเป็นผู้ปฏิบัติงานถาวร เท็จหากไม่รองรับ
javacopts

รายการสตริง ค่าเริ่มต้นคือ []

รายการอาร์กิวเมนต์เพิ่มเติมสำหรับคอมไพเลอร์ Java โปรดดูรายการแฟล็กคอมไพเลอร์ Java ทั้งหมดที่อาจใช้ได้
jspecify_implicit_deps

ป้ายกำกับ ค่าเริ่มต้นคือ None

ทดลอง อย่าใช้!
jspecify_javacopts

รายการสตริง ค่าเริ่มต้นคือ []

ทดลอง อย่าใช้!
jspecify_packages

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ทดลอง อย่าใช้!
jspecify_processor

ป้ายกำกับ ค่าเริ่มต้นคือ None

ทดลอง อย่าใช้!
jspecify_processor_class

สตริง ค่าเริ่มต้นคือ ""

ทดลอง อย่าใช้!
jspecify_stubs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ทดลอง อย่าใช้!
jvm_opts

รายการสตริง ค่าเริ่มต้นคือ []

รายการอาร์กิวเมนต์สำหรับ JVM เมื่อเรียกใช้คอมไพเลอร์ Java โปรดดูรายการแฟล็กที่เป็นไปได้ที่ครอบคลุมสำหรับตัวเลือกนี้ในเอกสารประกอบเกี่ยวกับ Java Virtual Mac
misc

รายการสตริง ค่าเริ่มต้นคือ []

เลิกใช้งานแล้ว: ใช้ javacopts แทน
oneversion

ป้ายกำกับ ค่าเริ่มต้นคือ None

ป้ายกำกับของไบนารีการบังคับใช้เวอร์ชันเดียว
oneversion_allowlist_for_tests

ป้ายกำกับ ค่าเริ่มต้นคือ None

ป้ายกำกับรายการที่อนุญาตเวอร์ชัน 1 เวอร์ชันสำหรับการทดสอบ
oneversion_whitelist

ป้ายกำกับ ค่าเริ่มต้นคือ None

ป้ายกำกับรายการที่อนุญาตเวอร์ชัน 1 เวอร์ชัน
package_configuration

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

การกำหนดค่าที่ควรนำไปใช้กับกลุ่มแพ็กเกจที่ระบุ
proguard_allowlister

ป้ายกำกับ ค่าเริ่มต้นคือ "@bazel_tools//tools/jdk:proguard_whitelister"

ป้ายกำกับรายการที่อนุญาตของ Proguard
reduced_classpath_incompatible_processors

รายการสตริง ค่าเริ่มต้นคือ []

API ภายใน อย่าใช้
singlejar

ป้ายกำกับ ค่าเริ่มต้นคือ None

ป้ายกำกับของโหลการติดตั้งใช้งาน SingleJar
source_version

สตริง ค่าเริ่มต้นคือ ""

เวอร์ชันซอร์สของ Java (เช่น "6" หรือ "7") ซึ่งจะระบุว่าโครงสร้างโค้ดชุดใดได้รับอนุญาตในซอร์สโค้ด Java
target_version

สตริง ค่าเริ่มต้นคือ ""

เวอร์ชันเป้าหมาย Java (เช่น "6" หรือ "7") ซึ่งจะระบุรันไทม์ของ Java ที่คลาสควรสร้างขึ้น
timezone_data

ป้ายกำกับ ค่าเริ่มต้นคือ None

ป้ายกำกับของ Jar ทรัพยากรที่มีข้อมูลเขตเวลา หากตั้งค่าไว้ ระบบจะเพิ่มข้อมูลเขตเวลาเป็นทรัพยากร Dependency รันไทม์โดยนัยของกฎ java_binary ทั้งหมด
tools

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ป้ายกำกับเครื่องมือที่มีสำหรับการขยายป้ายกำกับใน jvm_opts
turbine_data

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ป้ายกำกับข้อมูลที่ใช้ได้สำหรับการขยายป้ายกำกับใน turbine_jvm_opts
turbine_jvm_opts

รายการสตริง ค่าเริ่มต้นคือ []

รายการอาร์กิวเมนต์สำหรับ JVM เมื่อเรียกใช้ turbine
xlint

รายการสตริง ค่าเริ่มต้นคือ []

รายการคําเตือนให้เพิ่มหรือนำออกจากรายการเริ่มต้น มีเครื่องหมายขีดกลางอยู่หน้า เพื่อนำออก โปรดดูข้อมูลเพิ่มเติมจากเอกสาร Javac ในตัวเลือก -Xlint