กฎของ Java

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

กฎ

java_binary

ดูแหล่งที่มาของกฎ
java_binary(name, deps, srcs, data, resources, add_exports, add_opens, args, bootclasspath, classpath_resources, compatible_with, create_executable, deploy_env, deploy_manifest_lines, deprecation, env, exec_compatible_with, exec_group_compatible_with, exec_properties, features, javacopts, jvm_flags, launcher, licenses, main_class, neverlink, output_licenses, package_metadata, plugins, 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 ยอมรับแฟล็กที่ไม่ซ้ำกันหลายรายการ โปรดดู java_stub_template.txt เพื่อดูรายการค่าสถานะและตัวแปรสภาพแวดล้อมที่กำหนดค่าได้ซึ่ง Wrapper ยอมรับ

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

  • name.jar: ที่เก็บถาวรของ Java ซึ่งมีไฟล์คลาสและทรัพยากรอื่นๆ ที่สอดคล้องกับการอ้างอิงโดยตรงของไบนารี
  • 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 ต้นฉบับที่ตรงกัน

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

ไม่อนุญาตให้ใช้แอตทริบิวต์ 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

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

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

deps

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

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

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

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

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

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

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

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

data

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

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

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

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

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

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

add_exports

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

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

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

add_opens

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

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

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

bootclasspath

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

API ที่จำกัด ห้ามใช้
classpath_resources

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

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

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

create_executable

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

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

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

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

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

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

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

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

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

jvm_flags

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

รายการ Flag ที่จะฝังในสคริปต์ Wrapper ที่สร้างขึ้นเพื่อเรียกใช้ไบนารีนี้ ขึ้นอยู่กับ$(location) และ การแทนที่"สร้างตัวแปร" และ การแยกโทเค็นของ 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 จะไม่นำโค้ดที่ไม่ได้ใช้ออกในการกำหนดค่านี้
  • หากคุณใช้ตัวเรียกใช้ตัวอื่น การอ้างอิงแบบเนทีฟ (C++) จะลิงก์แบบคงที่กับไบนารีชื่อ {name}_nativedeps โดยที่ {name} คือแอตทริบิวต์ name ของกฎ java_binary นี้ ในกรณีนี้ Linker จะนำโค้ดที่คิดว่าไม่ได้ใช้ออกจากไบนารีที่ได้ ซึ่งหมายความว่าโค้ด C++ ที่เข้าถึงผ่าน JNI เท่านั้นอาจไม่ได้ลิงก์ เว้นแต่cc_libraryเป้าหมายนั้นจะระบุ alwayslink = True

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

main_class

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

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

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

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

plugins

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

ปลั๊กอินคอมไพเลอร์ Java ที่จะเรียกใช้ในเวลาคอมไพล์ ระบบจะเรียกใช้ทุก java_plugin ที่ระบุในแอตทริบิวต์นี้เมื่อใดก็ตามที่มีการสร้างกฎนี้ ไลบรารีอาจรับช่วงปลั๊กอินจากทรัพยากร Dependency ที่ใช้ exported_plugins ด้วย ระบบจะรวมทรัพยากร ที่ปลั๊กอินสร้างขึ้นไว้ในไฟล์ JAR ที่ได้จากกฎนี้
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

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

java_import

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

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

ตัวอย่าง


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

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

Attributes
name

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

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

deps

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

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

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

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

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

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

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

add_opens

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

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

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

constraints

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

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

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

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

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

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

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

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

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

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

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

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

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

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

java_library

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

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

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

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

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

Attributes
name

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

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

deps

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

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

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

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

srcs

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

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

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

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

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

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

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

คุณต้องระบุอาร์กิวเมนต์นี้เสมอ เว้นแต่จะระบุอาร์กิวเมนต์ runtime_deps

data

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

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

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

resources

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

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

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

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

add_exports

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

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

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

add_opens

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

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

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

bootclasspath

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

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

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

รายการ java_plugin (เช่น 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 ของตัวเองด้วย

javabuilder_jvm_flags

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

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

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

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

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

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

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

โปรดทราบว่า neverlink = True ไม่ได้ป้องกันไม่ให้คอมไพเลอร์ฝังเนื้อหา จากไลบรารีนี้ลงในเป้าหมายการคอมไพล์ที่ขึ้นอยู่กับไลบรารีนี้ ตามที่ข้อกำหนดของภาษา 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_binaryproguard_specs เพื่อให้แน่ใจว่าการผสานจะไม่ซ้ำซ้อน
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_test

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

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

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

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

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

ตัวอย่าง



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

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

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

Attributes
name

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

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

deps

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

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

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

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

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

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

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

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

data

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

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

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

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

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

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

add_exports

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

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

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

add_opens

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

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

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

bootclasspath

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

API ที่จำกัด ห้ามใช้
classpath_resources

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

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

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

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

main_class

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

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

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

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

plugins

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

ปลั๊กอินคอมไพเลอร์ Java ที่จะเรียกใช้ในเวลาคอมไพล์ ระบบจะเรียกใช้ทุก java_plugin ที่ระบุในแอตทริบิวต์นี้เมื่อใดก็ตามที่มีการสร้างกฎนี้ ไลบรารีอาจรับช่วงปลั๊กอินจากทรัพยากร Dependency ที่ใช้ exported_plugins ด้วย ระบบจะรวมทรัพยากร ที่ปลั๊กอินสร้างขึ้นไว้ในไฟล์ JAR ที่ได้จากกฎนี้
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)

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

use_launcher

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

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

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

use_testrunner

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

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

java_package_configuration

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

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

ตัวอย่าง



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

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

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


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

Attributes
name

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

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

data

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

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

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

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

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

packages

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

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

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

สอดคล้องกับแฟล็ก --system ของ javac

java_plugin

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

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

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

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

อาร์กิวเมนต์เป็นส่วนย่อยของ (และมีความหมายเหมือนกับ) อาร์กิวเมนต์ของ java_library() ยกเว้นอาร์กิวเมนต์ processor_class และ generates_api ที่เพิ่มเข้ามา

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

Attributes
name

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

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

deps

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

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

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

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

srcs

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

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

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

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

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

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

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

คุณต้องระบุอาร์กิวเมนต์นี้เสมอ เว้นแต่จะระบุอาร์กิวเมนต์ runtime_deps

data

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

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

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

resources

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

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

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

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

add_exports

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

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

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

add_opens

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

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

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

bootclasspath

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

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

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

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

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

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

javabuilder_jvm_flags

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

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

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

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

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

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

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

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

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

output_licenses

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

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_binaryproguard_specs เพื่อให้แน่ใจว่าการผสานจะไม่ซ้ำซ้อน
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, exec_compatible_with, exec_group_compatible_with, exec_properties, features, hermetic_srcs, hermetic_static_libs, java, java_home, lib_ct_sym, lib_modules, output_licenses, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, version, visibility)

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

ตัวอย่าง



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


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

Attributes
name

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

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

srcs

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

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

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

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

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

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

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

ไลบรารีที่ลิงก์แบบคงที่กับตัวเรียกใช้สำหรับการติดตั้งใช้งานแบบปิด
java

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

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

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

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

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

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

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

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

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

version

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

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

java_single_jar

ดูแหล่งที่มาของกฎ
java_single_jar(name, deps, compatible_with, compress, deploy_env, deploy_manifest_lines, deprecation, exclude_build_data, exec_compatible_with, exec_group_compatible_with, exec_properties, features, multi_release, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
รวบรวมการขึ้นต่อกันของ Java และไฟล์ JAR ไว้ในไฟล์ JAR เดียว `java_single_jar` รวบรวมการขึ้นต่อกันของ Java และไฟล์ JAR ไว้ในไฟล์ JAR เดียว ซึ่งคล้ายกับ java_binary ที่ปิดใช้ทุกอย่างที่เกี่ยวข้องกับไฟล์ที่เรียกใช้งานได้ และเป็นทางเลือกแทน "การแฮ็ก JAR ที่ใช้ในการติดตั้งใช้งาน" ของ java_binary ## ตัวอย่าง ```skylark load("//tools/build_defs/java_single_jar:java_single_jar.bzl", "java_single_jar") java_single_jar( name = "my_single_jar", deps = [ "//java/com/google/foo", "//java/com/google/bar", ], ) ``` เอาต์พุต {name}.jar: ไฟล์ JAR เดียวที่มีอินพุตทั้งหมด

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

Attributes
name

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

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

deps

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

เป้าหมาย Java (รวมถึง java_import และ java_library) เพื่อรวบรวม ทรัพยากร Dependency แบบทรานซิทีฟจาก ระบบจะรวบรวมการอ้างอิงรันไทม์ผ่าน deps, exports และ runtime_deps นอกจากนี้ยังมีการรวบรวมแหล่งข้อมูลด้วย แต่จะไม่รวมการอ้างอิง cc_library หรือ java_wrap_cc แบบเนทีฟ
compress

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

ว่าจะใช้การลดขนาดเสมอ ("yes") จัดเก็บเสมอ ("no") หรือส่งผ่าน โดยไม่มีการแก้ไข ("preserve") ค่าเริ่มต้นคือ "preserve" และเป็นตัวเลือกที่มีประสิทธิภาพมากที่สุด เนื่องจากไม่มีการดำเนินการเพิ่มเติมเพื่อขยายหรือลดขนาด
deploy_env

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

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

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

รายการบรรทัดที่จะเพิ่มลงในไฟล์ META-INF/manifest.mf
exclude_build_data

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

จะละเว้นไฟล์ build-data.properties ที่สร้างขึ้น โดยค่าเริ่มต้นหรือไม่
multi_release

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

จะเปิดใช้ไฟล์ JAR เอาต์พุตแบบหลายเวอร์ชันหรือไม่

java_toolchain

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

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

ตัวอย่าง

ตัวอย่างง่ายๆ มีดังนี้



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

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

Attributes
name

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

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

android_lint_data

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

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

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

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

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

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

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

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

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

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

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

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

null; ค่าเริ่มต้นคือ {}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ijar

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ทดลอง โปรดอย่าใช้
jspecify_javacopts

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

ทดลอง โปรดอย่าใช้
jspecify_packages

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

ทดลอง โปรดอย่าใช้
jspecify_processor

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

ทดลอง โปรดอย่าใช้
jspecify_processor_class

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

ทดลอง โปรดอย่าใช้
jspecify_stubs

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

ทดลอง โปรดอย่าใช้
jvm_opts

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

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

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

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

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

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

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

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

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

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

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

เลิกใช้งานแล้ว: ใช้ oneversion_allowlist แทน
package_configuration

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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