กฎของบัฟเฟอร์โปรโตคอล

รายงานปัญหา ดูแหล่งที่มา

กฎ

ต้นแบบเครื่องมือเครื่องมือโปรโต

ดูแหล่งที่มาของกฎ
proto_lang_toolchain(name, blacklisted_protos, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, mnemonic, plugin, plugin_format_flag, progress_message, proto_compiler, restricted_to, runtime, tags, target_compatible_with, testonly, visibility)

หากใช้ Bazel โปรดโหลดกฎจาก https://github.com/bazelbuild/rules_proto

ระบุวิธีที่กฎ lang_proto_library (เช่น java_proto_library) ควรเรียกใช้คอมไพเลอร์ต้นแบบ กฎ goog_proto_library บางกฎอนุญาตให้ระบุเครื่องมือเชนที่จะใช้โดยใช้แฟล็กบรรทัดคําสั่งในคู่มือ

ตามปกติแล้ว คุณไม่ควรเขียนกฎประเภทนี้ นอกจากว่าคุณต้องการปรับแต่งคอมไพเลอร์ Java

ไม่มีคอมไพเลอร์ คอมไพเลอร์ต้นแบบจะนําไปใช้จากกฎ proto_library ที่เราแนบไว้ ซึ่งส่งผ่านเป็นแฟล็กบรรทัดคําสั่งไปยัง Blaze ฟีเจอร์หลายอย่างต้องการให้คอมไพเลอร์ต้นแบบเรียกใช้ในกฎ proto_library เอง เป็นประโยชน์ในการบังคับใช้คอมไพเลอร์ที่ lang_proto_library เหมือนกับที่ proto_library

ตัวอย่าง

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

proto_lang_toolchain(
    name = "javalite_toolchain",
    command_line = "--javalite_out=shared,immutable:$(OUT)",
    plugin = ":javalite_plugin",
    runtime = ":protobuf_lite",
)

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

แอตทริบิวต์
name

Name; required

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

blacklisted_protos

List of labels; optional

ระบบจะไม่สร้างโค้ดสําหรับไฟล์ในแอตทริบิวต์ srcs ของ blacklisted_protos ใช้สําหรับไฟล์ .proto ที่ลิงก์ไปยังรันไทม์ของต้นแบบอยู่แล้ว เช่น any.proto
command_line

String; required

ค่านี้จะส่งผ่านไปยังคอมไพเลอร์ต้นแบบเพื่อสร้างโค้ด ใส่เฉพาะส่วนที่เฉพาะเจาะจงสําหรับเครื่องมือสร้างโค้ด/ปลั๊กอินนี้ (เช่น ไม่รวมพารามิเตอร์ -I)
  • $(OUT) มีไว้สําหรับผู้ให้บริการเฉพาะภาษาเฉพาะที่อยู่ กฎควรกําหนดวิธีตีความตัวแปรนี้ เช่น สําหรับ Java เราจะแทนที่ $(OUT) ด้วยชื่อไฟล์ src-jar เพื่อสร้าง
mnemonic

String; optional; default is "GenProto"

ค่านี้จะตั้งไว้เป็นหน่วยการกระทําในโปรโตคอล
plugin

Label; optional

หากระบุไว้ การดําเนินการดังกล่าวจะพร้อมใช้งานสําหรับการเรียกใช้คอมไพเลอร์ต้นแบบ และจะส่งไปยังคอมไพเลอร์โปรเซสเซอร์: --plugin=protoc-gen-PLUGIN=.
plugin_format_flag

String; optional

หากระบุไว้ ระบบจะส่งค่านี้ไปยังคอมไพเลอร์ต้นแบบเพื่อใช้ปลั๊กอิน ค่าต้องมี %เดียวที่แทนที่ด้วยไฟล์ปฏิบัติการปลั๊กอิน --plugin=protoc-gen-PLUGIN=.
progress_message

String; optional; default is "Generating proto_library %{label}"

ค่านี้จะตั้งเป็นข้อความความคืบหน้าเกี่ยวกับการดําเนินการของต้นแบบ
proto_compiler

Label; optional

ไฟล์ปฏิบัติการของคอมไพเลอร์ต้นแบบ หากระบุไว้ ระบบจะใช้เป้าหมายนี้เป็นคอมไพเลอร์ต้นแบบในการสร้างโค้ด
runtime

Label; optional

ไลบรารีเฉพาะภาษาที่มีการรวบรวมโค้ดที่สร้าง ลักษณะการทํางานที่แน่นอนคือมีเฉพาะ lang_proto_library เช่น Java ควรคอมไพล์กับรันไทม์

ต้นแบบ

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

เลิกใช้งานแล้ว โปรดใช้ https://github.com/bazelbuild/rules_proto แทน

ใช้ proto_library เพื่อกําหนดไลบรารีของบัฟเฟอร์โปรโตคอลที่อาจมาจากหลายภาษา proto_library อาจแสดงอยู่ในวรรค deps ของกฎที่รองรับ เช่น java_proto_library

เมื่อรวบรวมในบรรทัดคําสั่ง proto_library จะสร้างไฟล์ชื่อ foo-descriptor-set.proto.bin ซึ่งเป็นชุดคําอธิบายสําหรับข้อความของกฎ ไฟล์นี้เป็น FileDescriptorSet ที่มีหมายเลขซีเรียล ซึ่งอธิบายไว้ใน https://developers.google.com/protocol-buffers/docs/techniques#self-description

รายงานนี้มีข้อมูลเกี่ยวกับไฟล์ .proto ที่กฎ proto_library กล่าวถึงโดยตรง ส่วนชุดตัวบ่งชี้ทางอ้อมจะมีให้บริการผ่านผู้ให้บริการ [ProtoInfo].transitive_descriptor_setsStarlark ดูเอกสารประกอบใน ProtoInfo.java

การจัดระเบียบโค้ดที่แนะนํา

  • กฎ proto_library 1 กฎต่อไฟล์ .proto
  • ไฟล์ชื่อ foo.proto จะอยู่ในกฎชื่อ foo_proto ซึ่งอยู่ในแพ็กเกจเดียวกัน
  • [language]_proto_library ที่รวม proto_library ชื่อ foo_proto ควรมีชื่อว่า foo_[language]_proto และอยู่ในแพ็กเกจเดียวกัน

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

แอตทริบิวต์
name

Name; required

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

deps

List of labels; optional

รายการกฎ proto_library อื่นๆ ที่เป้าหมายกําหนด proto_library อาจขึ้นอยู่กับเป้าหมาย proto_library อื่นๆ เท่านั้น ซึ่งอาจไม่ได้ขึ้นอยู่กับไลบรารีเฉพาะภาษา
srcs

List of labels; optional

รายการไฟล์ .proto และ .protodevel ที่ประมวลผลเพื่อสร้างเป้าหมาย ซึ่งโดยปกติแล้วจะเป็นรายการที่ไม่ว่างเปล่า กรณีการใช้งานหนึ่งที่ srcs เว้นว่างได้คือ alias-library นี่เป็นกฎ proto_library ที่มี ต้นแบบ_ไลบรารีอื่นๆ อย่างน้อย 1 รายการใน deps รูปแบบนี้สามารถใช้เพื่อส่งออก API สาธารณะภายใต้ชื่อถาวร
exports

List of labels; optional

รายการเป้าหมาย proto_library ที่อ้างถึงได้ผ่าน "นําเข้าแบบสาธารณะ" ในแหล่งที่มาของต้นแบบ
import_prefix

String; optional

คํานําหน้าที่จะเพิ่มไปยังเส้นทางของไฟล์ .proto ในกฎนี้

เมื่อกําหนดค่าแล้ว ไฟล์แหล่งที่มา .proto ในแอตทริบิวต์ srcs ของกฎนี้จะเข้าถึงได้คือค่าของแอตทริบิวต์นี้ที่เพิ่มไว้ข้างหน้าเส้นทางที่เกี่ยวข้องกับที่เก็บ

คํานําหน้าในแอตทริบิวต์ strip_import_prefix จะถูกนําออกก่อนที่จะเพิ่มคํานําหน้านี้

strip_import_prefix

String; optional

คํานําหน้าที่จะตัดจากเส้นทางของไฟล์ .proto ในกฎนี้

เมื่อกําหนดค่าแล้ว ไฟล์แหล่งที่มา .proto ในแอตทริบิวต์ srcs ของกฎนี้จะเข้าถึงได้ในเส้นทางของ URL ที่ถูกตัดคํานําหน้านี้

หากเป็นเส้นทางแบบสัมพัทธ์ (ไม่ได้ขึ้นต้นด้วยเครื่องหมายทับ) ระบบจะถือว่าเป็นเส้นทางแบบแพ็กเกจ หากเป็นข้อมูลที่สัมบูรณ์ ให้เข้าใจว่าเป็นเส้นทางที่เกี่ยวข้องกับที่เก็บ

ระบบจะเพิ่มคํานําหน้าในแอตทริบิวต์ import_prefix หลังจากการตัดคํานําหน้านี้ออก