กฎของ Java

รายงานปัญหา ดูแหล่งที่มา Nightly{/19/} Nightly{/19/} /4} /20}

กฎ

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

สคริปต์ Wrapper ยอมรับการแจ้งที่ไม่ซ้ำหลายรายการ โปรดดู //src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt สำหรับรายการ Flag ที่กำหนดค่าได้และตัวแปรสภาพแวดล้อมที่ 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 ยกเว้นที่ 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 ระบุคลาสในคลาสเส้นทางรันไทม์ หรือคุณระบุอาร์กิวเมนต์ 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

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

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

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

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

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

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

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

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

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

jvm_flags

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

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

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

  • หากคุณใช้ Launcher ของ JDK ปกติ (ค่าเริ่มต้น) ระบบจะสร้างทรัพยากร Dependency เป็นไลบรารีที่ใช้ร่วมกันชื่อ {name}_nativedeps.so โดยที่ {name} คือแอตทริบิวต์ name ของกฎ java_binary นี้ Linker ในการกำหนดค่านี้ไม่นำโค้ดที่ไม่ได้ใช้งานออก
  • หากคุณใช้ Launcher อื่น ทรัพยากร Dependency ดั้งเดิม (C++) จะลิงก์แบบคงที่กับไบนารีชื่อ {name}_nativedeps โดยที่ {name} เป็นแอตทริบิวต์ name ของกฎ java_binary นี้ ในกรณีนี้ Linker จะนำโค้ดที่คิดว่าไม่ได้ใช้ออกจากไบนารีที่ได้ ซึ่งหมายความว่าระบบอาจไม่ลิงก์โค้ด 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 หรือรันไทม์_deps แทน
resource_strip_prefix

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

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

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

runtime_deps

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

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

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

add_opens

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

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

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

constraints

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

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

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

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

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

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

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

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

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

ไฟล์ที่จะใช้เป็นข้อกำหนดของ Proguard ข้อมูลเหล่านี้จะอธิบายชุดข้อกำหนดที่ Proguard จะใช้ หากระบุ ระบบจะเพิ่มรายการดังกล่าวลงในเป้าหมาย android_binary ทุกรายการที่ขึ้นอยู่กับไลบรารีนี้ ไฟล์ที่รวมอยู่ในที่นี้ต้องมีเฉพาะกฎที่เป็นตัวเองเท่านั้น ได้แก่ -dontnote, -dontwarn,asssumnosideeffects และกฎที่ขึ้นต้นด้วย -keep ตัวเลือกอื่นๆ จะปรากฏได้ใน Proguard_specs ของ android_binary เท่านั้นเพื่อให้แน่ใจว่ามีการผสานแบบไม่อัตโนมัติ
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 ได้ที่แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎบิลด์ส่วนใหญ่

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

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

srcs

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

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

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

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

กฎ: หากกฎ (โดยทั่วไปคือ 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 ที่ระบุ

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

add_opens

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

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

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

bootclasspath

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

API ที่ถูกจำกัด ห้ามใช้!
exported_plugins

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

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

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

exports

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

ส่งออกไลบรารีแล้ว

กฎข้อมูลผลิตภัณฑ์ที่นี่จะทำให้กฎดังกล่าวพร้อมใช้งานกับกฎหลัก เสมือนว่ากฎหลักจะขึ้นอยู่กับกฎเหล่านี้อย่างชัดเจน ซึ่งไม่เป็นความจริงสำหรับ deps ปกติ (ที่ไม่ได้ส่งออก)

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

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

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

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

javabuilder_jvm_flags

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

API ที่ถูกจำกัด ห้ามใช้!
javacopts

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

ตัวเลือกคอมไพเลอร์เพิ่มเติมสำหรับไลบรารีนี้ ขึ้นอยู่กับการแทนที่ "MakeVariable" และการแปลงข้อมูลเป็นโทเค็นของ 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,asssumnosideeffects และกฎที่ขึ้นต้นด้วย -keep ตัวเลือกอื่นๆ จะปรากฏได้ใน Proguard_specs ของ android_binary เท่านั้นเพื่อให้แน่ใจว่ามีการผสานแบบไม่อัตโนมัติ
resource_strip_prefix

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

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

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

runtime_deps

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

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

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

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

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

add_opens

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

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

ซึ่งสอดคล้องกับแฟล็ก javac และ 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 เนื้อหาของแอตทริบิวต์นี้ไม่อยู่ภายใต้การแทนที่ "Makeตัวแปร"
javacopts

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

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

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

jvm_flags

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

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

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

  • หากคุณใช้ Launcher ของ JDK ปกติ (ค่าเริ่มต้น) ระบบจะสร้างทรัพยากร Dependency เป็นไลบรารีที่ใช้ร่วมกันชื่อ {name}_nativedeps.so โดยที่ {name} คือแอตทริบิวต์ name ของกฎ java_binary นี้ Linker ในการกำหนดค่านี้ไม่นำโค้ดที่ไม่ได้ใช้งานออก
  • หากคุณใช้ Launcher อื่น ทรัพยากร Dependency ดั้งเดิม (C++) จะลิงก์กับไบนารีชื่อ {name}_nativedeps ในเชิงสถิติ โดยที่ {name} คือแอตทริบิวต์ name ของกฎ java_binary นี้ ในกรณีนี้ Linker จะนำโค้ดที่คิดว่าไม่ได้ใช้ออกจากไบนารีที่ได้ ซึ่งหมายความว่าโค้ด 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) หากคลาสไม่พร้อมใช้งาน ไบนารีจะล้มเหลวขณะรันไทม์ จะไม่มีการตรวจสอบเวลาบิลด์

บูลีน ค่าเริ่มต้นคือ 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

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

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

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

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

srcs

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

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

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

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

กฎ: หากกฎ (โดยทั่วไปคือ 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 ที่ระบุ

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

add_opens

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

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

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

bootclasspath

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

API ที่ถูกจำกัด ห้ามใช้!
generates_api

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

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

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

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

javabuilder_jvm_flags

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

API ที่ถูกจำกัด ห้ามใช้!
javacopts

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

ตัวเลือกคอมไพเลอร์เพิ่มเติมสำหรับไลบรารีนี้ ขึ้นอยู่กับการแทนที่ "MakeVariable" และการแปลงข้อมูลเป็นโทเค็นของ 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 แต่คลาสพาธรันไทม์ของกฎดังกล่าวจะยังรวมอยู่ในเส้นทางตัวประมวลผลคำอธิบายประกอบของคอมไพเลอร์ (ซึ่งมีวัตถุประสงค์หลักเพื่อการใช้งานโดยปลั๊กอินที่เกิดข้อผิดพลาด ซึ่งโหลดจากเส้นทางผู้ประมวลผลข้อมูลคำอธิบายประกอบโดยใช้ java.util.ServiceLoader)
proguard_specs

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

ไฟล์ที่จะใช้เป็นข้อกำหนดของ Proguard ข้อมูลเหล่านี้จะอธิบายชุดข้อกำหนดที่ Proguard จะใช้ หากระบุ ระบบจะเพิ่มรายการดังกล่าวลงในเป้าหมาย android_binary ทุกรายการที่ขึ้นอยู่กับไลบรารีนี้ ไฟล์ที่รวมอยู่ในที่นี้ต้องมีเฉพาะกฎที่เป็นตัวเองเท่านั้น ได้แก่ -dontnote, -dontwarn,asssumnosideeffects และกฎที่ขึ้นต้นด้วย -keep ตัวเลือกอื่นๆ จะปรากฏได้ใน Proguard_specs ของ android_binary เท่านั้นเพื่อให้แน่ใจว่ามีการผสานแบบไม่อัตโนมัติ
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 ได้มีการจัดแพ็กเกจ CDS เริ่มต้น java_runtime ใน 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 Toolchain ที่จะใช้นั้นเปลี่ยนแปลงได้ผ่านอาร์กิวเมนต์ --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

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

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

null; default is {}

API ภายใน ห้ามใช้
deps_checker

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

ป้ายกำกับของ ImportDepsChecker ให้ติดตั้งใช้งาน jar
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

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

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

ijar

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

ป้ายกำกับไฟล์ปฏิบัติการจาร์
jacocorunner

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

ป้ายกำกับของ JacococoverRunner สำหรับติดตั้งใช้งาน jar
java_runtime

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

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

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

ป้ายกำกับของ JavaBuilder สำหรับการทำให้ใช้งานได้ของ Java
javabuilder_data

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

อยู่ในช่วงทดลอง ห้ามใช้
jspecify_javacopts

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

อยู่ในช่วงทดลอง ห้ามใช้
jspecify_packages

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

อยู่ในช่วงทดลอง ห้ามใช้
jspecify_processor

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

อยู่ในช่วงทดลอง ห้ามใช้
jspecify_processor_class

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

อยู่ในช่วงทดลอง ห้ามใช้
jspecify_stubs

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

อยู่ในช่วงทดลอง ห้ามใช้
jvm_opts

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

API ภายใน ห้ามใช้
singlejar

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

ป้ายกำกับของ Jar ทำให้ใช้งานได้ของ 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 เมื่อเรียกใช้กังหัน
xlint

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

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