กฎของ Java

กฎ

java_binary

java_binary(name, deps, srcs, data, resources, args, classpath_resources, compatible_with, create_executable, deploy_env, deploy_manifest_lines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, javacopts, jvm_flags, launcher, licenses, main_class, output_licenses, plugins, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, stamp, tags, target_compatible_with, testonly, toolchains, use_launcher, use_testrunner, visibility)

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

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

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

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

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

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

    หากเป้าหมายระบุ Launcher ของคุณ แทนที่จะเป็นไฟล์ JAR ปกติ _deploy.jar จะเป็น เลขฐานสองแบบเนทีฟ ซึ่งจะมี Launcher และการอ้างอิงดั้งเดิม (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

Name; required

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


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

List of labels; optional

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

List of labels; optional

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

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

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

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

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

resources

List of labels; optional

รายการไฟล์ข้อมูลที่จะรวมไว้ใน 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

List of labels; optional

ห้ามใช้ตัวเลือกนี้ เว้นแต่ว่าไม่มีทางเลือกอื่น)

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

create_executable

Boolean; optional; nonconfigurable; default is True

ไบนารีนี้เป็นไฟล์ปฏิบัติการหรือไม่ ไบนารีที่ไม่สามารถดำเนินการได้จะรวบรวมทางอ้อม ทรัพยากร Dependency ของ Java ในรันไทม์ลงใน Jar ที่มีการทำให้ใช้งานได้ แต่ไม่สามารถดำเนินการโดยตรง จะไม่มีการสร้างสคริปต์ Wrapper หากตั้งค่าแอตทริบิวต์นี้ เกิดข้อผิดพลาดในการตั้ง ให้เป็น 0 หากแอตทริบิวต์ launcher หรือ main_class ได้รับการตั้งค่าแล้ว
deploy_env

List of labels; optional

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

List of strings; optional

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

List of strings; optional

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

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

jvm_flags

List of strings; optional

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

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

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

launcher

Label; optional

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

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

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

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

  • หากคุณใช้ JDK Launcher ปกติ (ค่าเริ่มต้น) ทรัพยากร 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 อื่นที่ไม่ใช่ JDK Launcher เริ่มต้น การเปลี่ยนแปลงเอาต์พุต *_deploy.jar รายการ ดูข้อมูลหลัก java_binary เพื่อดูรายละเอียด

main_class

String; optional

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

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

plugins

List of labels; optional

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

List of labels; optional

เลิกใช้งานแล้ว: ใช้ java_IMPORT และ deps หรือรันไทม์_deps แทน
resource_strip_prefix

String; optional

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

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

runtime_deps

List of labels; optional

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

Integer; optional; default is -1

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

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

use_launcher

Boolean; optional; default is True

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

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

use_testrunner

Boolean; optional; default is 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

Name; required

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

deps

List of labels; optional

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

List of strings; optional; nonconfigurable

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

List of labels; optional

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

List of labels; required

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

Boolean; optional; default is False

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

List of labels; optional

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

List of labels; optional

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

Label; optional

ไฟล์ 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: ที่เก็บถาวรที่มีแหล่งที่มา ("แหล่งที่มา jar")

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

Attributes
name

Name; required

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

deps

List of labels; optional

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

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

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

srcs

List of labels; optional

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

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

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

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

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

data

List of labels; optional

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

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

resources

List of labels; optional

รายการไฟล์ข้อมูลที่จะรวมไว้ใน 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

List of labels; optional

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

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

exports

List of labels; optional

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

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

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

สมมติว่า 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

javacopts

List of strings; optional

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

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

Boolean; optional; default is False

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

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

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

plugins

List of labels; optional

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

List of labels; optional

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

List of labels; optional

เลิกใช้งานแล้ว: ใช้ java_IMPORT และ deps หรือรันไทม์_deps แทน
resource_strip_prefix

String; optional

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

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

runtime_deps

List of labels; optional

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

Name; required

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

deps

List of labels; optional

รายการ 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

Name; required

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

deps

List of labels; optional

รายการ 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

Name; required

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

deps

List of labels; optional

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

List of labels; optional

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

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

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

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

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

resources

List of labels; optional

รายการไฟล์ข้อมูลที่จะรวมไว้ใน 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

List of labels; optional

ห้ามใช้ตัวเลือกนี้ เว้นแต่ว่าไม่มีทางเลือกอื่น)

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

create_executable

Boolean; optional; nonconfigurable; default is True

ไบนารีนี้เป็นไฟล์ปฏิบัติการหรือไม่ ไบนารีที่ไม่สามารถดำเนินการได้จะรวบรวมทางอ้อม ทรัพยากร Dependency ของ Java ในรันไทม์ลงใน Jar ที่มีการทำให้ใช้งานได้ แต่ไม่สามารถดำเนินการโดยตรง จะไม่มีการสร้างสคริปต์ Wrapper หากตั้งค่าแอตทริบิวต์นี้ เกิดข้อผิดพลาดในการตั้ง ให้เป็น 0 หากแอตทริบิวต์ launcher หรือ main_class ได้รับการตั้งค่าแล้ว
deploy_manifest_lines

List of strings; optional

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

List of strings; optional

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

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

jvm_flags

List of strings; optional

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

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

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

launcher

Label; optional

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

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

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

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

  • หากคุณใช้ JDK Launcher ปกติ (ค่าเริ่มต้น) ทรัพยากร 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 อื่นที่ไม่ใช่ JDK Launcher เริ่มต้น การเปลี่ยนแปลงเอาต์พุต *_deploy.jar รายการ ดูข้อมูลหลัก java_binary เพื่อดูรายละเอียด

main_class

String; optional

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

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

plugins

List of labels; optional

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

List of labels; optional

เลิกใช้งานแล้ว: ใช้ java_IMPORT และ deps หรือรันไทม์_deps แทน
resource_strip_prefix

String; optional

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

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

runtime_deps

List of labels; optional

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

Integer; optional; default is 0

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

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

test_class

String; optional

คลาส 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

Boolean; optional; default is True

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

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

use_testrunner

Boolean; optional; default is 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

Name; required

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

data

List of labels; optional

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

List of strings; optional

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

List of labels; optional

ชุดของ 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

Name; required

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

deps

List of labels; optional

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

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

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

srcs

List of labels; optional

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

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

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

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

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

data

List of labels; optional

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

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

resources

List of labels; optional

รายการไฟล์ข้อมูลที่จะรวมไว้ใน 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

Boolean; optional; default is False

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

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

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

javacopts

List of strings; optional

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

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

Boolean; optional; default is False

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

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

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

output_licenses

Licence type; optional

โปรดดู common attributes
plugins

List of labels; optional

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

String; optional

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

List of labels; optional

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

List of labels; optional

เลิกใช้งานแล้ว: ใช้ java_IMPORT และ deps หรือรันไทม์_deps แทน
resource_strip_prefix

String; optional

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

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

java_runtime

java_runtime(name, srcs, compatible_with, deprecation, distribs, features, hermetic_srcs, java, java_home, 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

Name; required

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

srcs

List of labels; optional

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

List of labels; optional

ไฟล์ในช่วงรันไทม์ที่จำเป็นสำหรับการติดตั้งใช้งานที่ต่อเนื่อง
java

Label; optional

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

String; optional

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

Label; optional

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

Integer; optional; default is 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_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

Name; required

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

android_lint_data

List of labels; optional

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

List of strings; optional

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

List of strings; optional

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

List of labels; optional

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

Label; optional

ป้ายกำกับของ Android Lint Runner (หากมี)
bootclasspath

List of labels; optional

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

List of labels; optional

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

Boolean; optional; default is False

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

List of labels; required

ป้ายกำกับของ jar ที่ใช้ GenClass
header_compiler

List of labels; optional

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

List of labels; optional

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

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

ijar

List of labels; required

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

Label; optional

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

Label; required

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

List of labels; required

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

List of labels; optional

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

List of strings; optional

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

Boolean; optional; default is True

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

Boolean; optional; default is True

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

List of strings; optional

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

List of strings; optional

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

Label; optional

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

Label; optional

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

List of labels; optional

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

Label; optional; default is @bazel_tools//tools/jdk:proguard_whitelister

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

List of labels; optional

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

List of labels; required

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

String; optional

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

String; optional

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

Label; optional

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

List of labels; optional

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

List of labels; optional

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

List of strings; optional

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

List of strings; optional

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