กฎของ Java

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

กฎ

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 ใช้ classpath ที่มีไฟล์ jar สำหรับแต่ละไลบรารีที่ไบนารีนั้นใช้อยู่ เมื่อเรียกใช้สคริปต์ Wrapper ของ Wrapper ตัวแปรสภาพแวดล้อม JAVABIN ที่ไม่ว่างเปล่าจะมีความสำคัญเหนือกว่าเวอร์ชันที่ระบุผ่านแฟล็ก --java_runtime_version ของ Bazel

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

เป้าหมายเอาต์พุตโดยนัย

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

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

    JAR ที่ใช้ติดตั้งประกอบด้วยคลาสทั้งหมดที่ Class Loader จะพบซึ่งค้นหา Classpath จากสคริปต์ Wrapper ของไบนารีตั้งแต่ต้นจนจบ รวมถึงมีไลบรารีเนทีฟที่จําเป็นสําหรับทรัพยากร Dependency ด้วย ระบบจะโหลดไฟล์เหล่านี้ลงใน JVM โดยอัตโนมัติเมื่อรันไทม์

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

  • name_deploy-src.jar: ที่เก็บถาวรที่มีแหล่งที่มาที่รวบรวมจากการปิดเป้าหมายแบบทางอ้อม ซึ่งจะจับคู่กับคลาสใน deploy.jar ยกเว้นในกรณีที่ Jar ไม่มี 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)

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

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

resources

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

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

หากระบุทรัพยากร ระบบจะรวมทรัพยากรไว้ในไฟล์ 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 วัตถุประสงค์เดียวของแอตทริบิวต์นี้คือเพื่อรองรับไลบรารีของบุคคลที่สามที่กำหนดให้ต้องพบทรัพยากรในคลาสพาธเป็น "myconfig.xml" เท่านั้น โดยจะอนุญาตเฉพาะในไบนารี ไม่ใช่ไลบรารี เนื่องจากอันตรายจากความขัดแย้งของเนมสเปซ

create_executable

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

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

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

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

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

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

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

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

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

jvm_flags

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

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

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

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

launcher

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

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

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

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

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

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

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

main_class

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

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

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

plugins

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

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

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

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

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

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

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

runtime_deps

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

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

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

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

ระบบจะไม่สร้างไบนารีที่ประทับตราอีกครั้ง เว้นแต่ทรัพยากร Dependency จะมีการเปลี่ยนแปลง

use_launcher

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

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

หากตั้งค่าแอตทริบิวต์นี้เป็น "เท็จ" ระบบจะละเว้นแอตทริบิวต์ launcher และ Flag --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, 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, 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
constraints

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

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

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

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

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

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

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

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

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

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

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

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

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

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

java_library

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

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

เป้าหมายเอาต์พุตโดยนัย

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

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

Attributes
name

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

ชื่อที่ไม่ซ้ำกันสําหรับเป้าหมายนี้

deps

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

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

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

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

srcs

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

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

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

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

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

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

data

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

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

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

resources

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

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

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

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

exported_plugins

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

รายการ java_plugin (เช่น โปรแกรมประมวลผลคำอธิบายประกอบ) เพื่อส่งออกไปยังไลบรารีที่ขึ้นต่อกันกับไลบรารีนี้โดยตรง

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

exports

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

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

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

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

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

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

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

javacopts

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

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

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

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

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

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

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

plugins

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

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

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

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

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

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

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

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

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

runtime_deps

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

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

java_lite_proto_library

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

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

deps ต้องชี้ไปยังกฎ proto_library

ตัวอย่าง

java_library(
    name = "lib",
    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, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

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

deps ต้องชี้ไปยังกฎ proto_library

ตัวอย่าง

java_library(
    name = "lib",
    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, args, 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, plugins, resource_jars, 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)

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

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

resources

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

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

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

create_executable

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

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

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

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

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

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

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

jvm_flags

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

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

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

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

launcher

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

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

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

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

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

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

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

main_class

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

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

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

plugins

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

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

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

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

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

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

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

runtime_deps

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

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

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

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

ระบบจะไม่สร้างไฟล์ไบนารีที่มีตราประทับอีกครั้ง เว้นแต่จะมีการเปลี่ยนแปลงทรัพยากร Dependency

test_class

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

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

โดยค่าเริ่มต้น หากไม่ได้กําหนดอาร์กิวเมนต์นี้ ระบบจะใช้โหมดเดิมและใช้อาร์กิวเมนต์ทดสอบแทน ตั้งค่า Flag --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 และแฟล็ก --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, features, javacopts, licenses, packages, restricted_to, tags, target_compatible_with, testonly, 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
packages

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

ชุด package_group ที่ควรใช้การกําหนดค่า

java_plugin

ดูแหล่งที่มาของกฎ
java_plugin(name, deps, srcs, data, resources, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, generates_api, javacopts, licenses, neverlink, output_licenses, plugins, processor_class, proguard_specs, resource_jars, resource_strip_prefix, restricted_to, tags, target_compatible_with, testonly, 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 ที่หัวข้อแอตทริบิวต์ทั่วไปที่กฎการสร้างส่วนใหญ่กำหนด

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

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

srcs

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

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

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

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

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

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

data

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

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

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

resources

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

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

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

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

generates_api

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

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

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

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

javacopts

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

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

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

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

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

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

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

output_licenses

ประเภทใบอนุญาต ค่าเริ่มต้นคือ ["none"]

ดู common attributes
plugins

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

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

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

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

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

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

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

เลิกใช้งานแล้ว: ใช้ java_import และ deps หรือรันไทม์_deps แทน
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, features, hermetic_srcs, java, java_home, lib_ct_sym, lib_modules, licenses, restricted_to, tags, target_compatible_with, testonly, 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 ระบบจะจัดแพ็กเกจ CDS เริ่มต้น java_runtime ไว้ใน JAR ที่ทำให้ใช้งานได้แบบสนิม
hermetic_srcs

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

ไฟล์ในรันไทม์ที่จําเป็นสําหรับการติดตั้งใช้งานแบบปิด
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 ที่จำเป็นสำหรับการติดตั้งใช้งานที่แยกต่างหาก
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_with, deprecation, deps_checker, distribs, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_workers, javacopts, jvm_opts, licenses, oneversion, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, proguard_allowlister, resourcejar, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, 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 Runner (หากมี)
bootclasspath

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

รายการบูตแพตธ์เป้าหมาย Java สอดคล้องกับ Flag -bootclasspath ของ javac
deps_checker

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

ป้ายกำกับของ ImportDepsChecker ให้ติดตั้งใช้งาน jar
forcibly_disable_header_compilation

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

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

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

ป้ายกำกับของไฟล์ JAR สำหรับติดตั้ง GenClass
header_compiler

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

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

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

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

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

ijar

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

ป้ายกำกับของไฟล์ปฏิบัติการ ijar
jacocorunner

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

ป้ายกำกับของ JacococoverRunner แบบทำให้ใช้งานได้
java_runtime

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

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

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

ป้ายกำกับของไฟล์ jar ที่ใช้ติดตั้ง JavaBuilder
javabuilder_data

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

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

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

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

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

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

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

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

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

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

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

รายการอาร์กิวเมนต์สําหรับ JVM เมื่อเรียกใช้คอมไพเลอร์ Java โปรดดูรายการ Flag ทั้งหมดที่เป็นไปได้สำหรับตัวเลือกนี้ในเอกสารประกอบเครื่องเสมือน Java
oneversion

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

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

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

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

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

ป้ายกำกับของรายการที่อนุญาตพิเศษเวอร์ชันเดียว
package_configuration

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

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

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

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

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

ป้ายกำกับของไฟล์ปฏิบัติการของเครื่องมือสร้าง Jar ทรัพยากร
singlejar

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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