กฎของ Java

กฎ

java_binary

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

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

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

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

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

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

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

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

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

DO NOT USE THIS OPTION UNLESS THERE IS NO OTHER WAY)

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

create_executable

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

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

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

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

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

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

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

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

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

jvm_flags

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

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

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

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

launcher

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

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

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

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

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

  • หากคุณใช้ตัวเรียกใช้ 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

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

main_class

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

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

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

plugins

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

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

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

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

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

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

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

runtime_deps

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

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

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

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

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

use_launcher

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

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

หากตั้งค่าแอตทริบิวต์นี้เป็น "เท็จ" ระบบจะไม่สนใจแอตทริบิวต์ 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, compatible_with, constraints, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, visibility)

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

ตัวอย่าง

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

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

Attributes
name

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

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

deps

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

java_library

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

กฎนี้จะรวบรวมและลิงก์แหล่งข้อมูลเป็นไฟล์ .jar

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

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

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

Attributes
name

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

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

deps

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

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

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

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

srcs

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

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

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

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

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

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

data

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

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

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

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 เพื่อระบุ ไดเรกทอรีสำรองที่เฉพาะเจาะจงสำหรับไฟล์ทรัพยากรได้

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

exported_plugins

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

รายการ java_plugin (เช่น annotation processors) ที่จะส่งออกไปยังไลบรารีที่ขึ้นต่อกันกับไลบรารีนี้โดยตรง

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

exports

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

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

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

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

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

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

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

javacopts

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

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

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

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

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

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

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

plugins

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

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

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

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

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

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

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

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

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

runtime_deps

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

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

java_lite_proto_library

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

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

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

ตัวอย่าง

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

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

proto_library(
    name = "bar",
)

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

Attributes
name

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

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

deps

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

รายการกฎ proto_library เพื่อสร้างโค้ด Java

java_proto_library

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

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

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

ตัวอย่าง

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

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

proto_library(
    name = "foo_proto",
)

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

Attributes
name

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

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

deps

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

รายการกฎ proto_library เพื่อสร้างโค้ด Java

java_test

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

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

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

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

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

ตัวอย่าง

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

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

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

Attributes
name

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

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

deps

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

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

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

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

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

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

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

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

resources

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

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

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

DO NOT USE THIS OPTION UNLESS THERE IS NO OTHER WAY)

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

create_executable

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

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

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

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

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

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

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

jvm_flags

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

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

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

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

launcher

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

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

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

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

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

  • หากคุณใช้ตัวเรียกใช้ 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

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

main_class

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

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

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

plugins

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

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

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

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

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

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

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

runtime_deps

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

ไลบรารีที่จะทำให้พร้อมใช้งานในไบนารีสุดท้ายหรือทดสอบที่รันไทม์เท่านั้น เช่นเดียวกับ deps ทั่วไป ไฟล์เหล่านี้จะปรากฏใน classpath ของรันไทม์ แต่จะไม่ปรากฏใน classpath ของเวลาคอมไพล์ การอ้างอิงที่จำเป็นเฉพาะในรันไทม์ควร แสดงไว้ที่นี่ เครื่องมือวิเคราะห์การขึ้นต่อกันควรละเว้นเป้าหมายที่ปรากฏทั้งใน 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, ...) ได้ โดยปกติ ระบบจะส่งข้อมูลเพิ่มเติมไปยังTest (เช่น ผ่าน jvm_flags=['-Dkey=value']) เพื่อให้ลักษณะการทำงานของTest แตกต่างกันในแต่ละกรณี เช่น การเรียกใช้ชุดย่อยของการทดสอบที่แตกต่างกัน นอกจากนี้ แอตทริบิวต์นี้ยังช่วยให้ใช้ การทดสอบ Java นอกโครงสร้าง javatests ได้ด้วย

use_launcher

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

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

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

use_testrunner

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

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

java_package_configuration

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

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

ตัวอย่าง

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

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

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

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

Attributes
name

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

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

data

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

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

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

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

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

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

java_plugin

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

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

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

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

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

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

Attributes
name

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

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

deps

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

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

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

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

srcs

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

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

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

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

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

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

data

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

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

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

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 เพื่อระบุ ไดเรกทอรีสำรองที่เฉพาะเจาะจงสำหรับไฟล์ทรัพยากรได้

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

generates_api

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

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

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

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

javacopts

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

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

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

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

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

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

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

output_licenses

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

ดู common attributes
plugins

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

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

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

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

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

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

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

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

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

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

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

java_runtime

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

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

ตัวอย่าง

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

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

Attributes
name

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

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

srcs

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

java_toolchain

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

ระบุการกำหนดค่าสำหรับคอมไพเลอร์ Java คุณเปลี่ยน 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 (หากมี)
bootclasspath

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

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

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

ป้ายกำกับของไฟล์ JAR ที่ใช้ในการติดตั้งใช้งาน ImportDepsChecker
forcibly_disable_header_compilation

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

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

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

ป้ายกำกับของไฟล์ JAR ที่ใช้ในการติดตั้งใช้งาน GenClass
header_compiler

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

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

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

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

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

ijar

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

ป้ายกำกับของไฟล์ที่เรียกใช้งานได้ ijar
jacocorunner

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

ป้ายกำกับของไฟล์ JAR ที่ใช้ในการติดตั้งใช้งาน JacocoCoverageRunner
java_runtime

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

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

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

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

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

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

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

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

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

เป็นจริงหาก JavaBuilder รองรับการทำงานเป็น Multiplex Persistent Worker และเป็นเท็จหากไม่รองรับ
javac_supports_worker_multiplex_sandboxing

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

เป็นจริงหาก JavaBuilder รองรับการแซนด์บ็อกซ์แบบมัลติเพล็กซ์ เป็นเท็จหากไม่รองรับ
javac_supports_workers

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

เป็นจริงหาก JavaBuilder รองรับการทำงานเป็น Worker แบบถาวร และเป็นเท็จหากไม่รองรับ
javacopts

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ป้ายกำกับของไฟล์ JAR ที่ใช้ในการติดตั้งใช้งาน SingleJar
source_version

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

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

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

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

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

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

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

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

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

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

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

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

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

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