Quy tắc lưu vào giao thức

Báo cáo sự cố Xem nguồn

Quy tắc

chuỗi công cụ proto_lang_tool

Xem nguồn quy tắc
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)

Nếu bạn dùng Bazel, vui lòng tải quy tắc này tại https://github.com/bazelbuild/rules_proto.

Chỉ định cách quy tắc xls_proto_library (ví dụ: java_proto_library) sẽ gọi trình biên dịch proto. Một số quy tắc xls_proto_library cho phép bạn chỉ định chuỗi công cụ nào để sử dụng cờ dòng lệnh; hãy tham khảo tài liệu của các chuỗi đó.

Thông thường, bạn không nên viết loại quy tắc đó trừ khi bạn muốn điều chỉnh trình biên dịch Java của mình.

Không có trình biên dịch nào. Trình biên dịch proto được lấy từ quy tắc proto_library mà chúng tôi đính kèm. Nó được chuyển dưới dạng cờ dòng lệnh tới Blaze. Một số tính năng yêu cầu trình biên dịch proto được gọi trên chính quy tắc proto_library. Việc thực thi trình biên dịch mà xls_proto_library sử dụng cũng giống như lợi ích của trình biên dịch proto_library.

Ví dụ

Một ví dụ đơn giản là:

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

Đối số

Thuộc tính
name

Name; required

Tên duy nhất cho mục tiêu này.

blacklisted_protos

List of labels; optional

Hệ thống sẽ không tạo mã nào cho các tệp trong thuộc tính srcs của blacklisted_protos. Thuộc tính này được dùng cho các tệp .proto đã liên kết với thời gian chạy proto, chẳng hạn như any.proto.
command_line

String; required

Giá trị này sẽ được truyền đến trình biên dịch proto để tạo mã. Chỉ bao gồm các phần dành riêng cho trình tạo mã/trình bổ trợ này (ví dụ: không bao gồm các thông số -I)
  • $(OUT) có định dạng ');_proto_library-cụ thể. Quy tắc được dự kiến sẽ xác định cách họ diễn giải biến này. Ví dụ: đối với Java, $(OUT) sẽ được thay thế bằng tên tệp src-jar để tạo.
mnemonic

String; optional; default is "GenProto"

Giá trị này sẽ được đặt làm kỷ niệm khi thực hiện hành động protoc.
plugin

Label; optional

Nếu được cung cấp, nó sẽ được cung cấp cho hành động gọi trình biên dịch proto và sẽ được chuyển đến trình biên dịch proto: --plugin=protoc-gen-PLUGIN=.
plugin_format_flag

String; optional

Nếu được cung cấp, giá trị này sẽ được chuyển đến trình biên dịch proto để sử dụng trình bổ trợ. Giá trị phải chứa một %s được thay thế bằng trình bổ trợ thực thi. --plugin=protoc-gen-PLUGIN=.
progress_message

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

Giá trị này sẽ được đặt làm thông báo tiến trình trên hành động protoc.
proto_compiler

Label; optional

Trình biên dịch proto có thể thực thi. Nếu được cung cấp, mục tiêu này sẽ được dùng làm trình biên dịch proto để tạo mã.
runtime

Label; optional

Thư viện dành riêng cho ngôn ngữ mà mã được tạo được biên dịch. Hành vi chính xác là xls_proto_library-specific. Ví dụ: Java sẽ được biên dịch dựa trên thời gian chạy.

thư viện proto

Xem nguồn quy tắc
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)

Không dùng nữa. Thay vào đó, vui lòng sử dụng https://github.com/bazelbuild/rules_proto.

Sử dụng proto_library để xác định các thư viện của vùng đệm giao thức có thể dùng từ nhiều ngôn ngữ. proto_library có thể được liệt kê trong mệnh đề deps của các quy tắc được hỗ trợ, chẳng hạn như java_proto_library.

Khi được biên dịch trên dòng lệnh, proto_library sẽ tạo một tệp có tên là foo-descriptor-set.proto.bin. Đây là tệp mô tả được thiết lập cho các thông báo mà quy tắc này đưa vào. Tệp là một FileDescriptorSet tuần tự, được mô tả trong https://developers.google.com/protocol-buffers/docs/techniques#self-description.

Tệp này chỉ chứa thông tin về các tệp .proto được đề cập trực tiếp bởi quy tắc proto_library; tập hợp các bộ mô tả bắc cầu có sẵn thông qua nhà cung cấp Starlark [ProtoInfo].transitive_descriptor_sets. Xem tài liệu trong ProtoInfo.java.

Cách tổ chức mã đề xuất:

  • Một quy tắc proto_library cho mỗi tệp .proto.
  • Tệp có tên foo.proto sẽ nằm trong quy tắc tên là foo_proto, nằm trong cùng một gói.
  • [language]_proto_library bao bọc một proto_library có tên là foo_proto phải được gọi là foo_[language]_proto và nằm trong cùng một gói.

Đối số

Thuộc tính
name

Name; required

Tên duy nhất cho mục tiêu này.

deps

List of labels; optional

Danh sách các quy tắc proto_library khác mà mục tiêu phụ thuộc vào. proto_library chỉ có thể phụ thuộc vào các mục tiêu proto_library khác. Thư viện này có thể không phụ thuộc vào các thư viện dành riêng cho ngôn ngữ.
srcs

List of labels; optional

Danh sách các tệp .proto.protodevel được xử lý để tạo mục tiêu. Đây thường là một danh sách không trống. Một trường hợp sử dụng mà trong đó srcs có thể trống là alias-library. Đây là quy tắc proto_library có một hoặc nhiều proto_library khác trong deps. Bạn có thể dùng mẫu này để xuất api công khai dưới tên cố định.
exports

List of labels; optional

Danh sách các mục tiêu proto_library có thể được tham chiếu qua "nhập công khai" trong nguồn toto.
import_prefix

String; optional

Tiền tố để thêm vào đường dẫn của tệp .proto trong quy tắc này.

Khi được đặt, các tệp nguồn .proto trong thuộc tính srcs của quy tắc này sẽ có thể truy cập được là giá trị của thuộc tính này được thêm vào trước đường dẫn tương đối của kho lưu trữ.

Tiền tố trong thuộc tính strip_import_prefix sẽ bị xoá trước khi tiền tố này được thêm vào.

strip_import_prefix

String; optional

Tiền tố để xoá khỏi đường dẫn của tệp .proto trong quy tắc này.

Khi bạn đặt, các tệp nguồn .proto trong thuộc tính srcs của quy tắc này có thể truy cập được trên đường dẫn của tệp, trong đó tiền tố này bị cắt.

Nếu đó là một đường dẫn tương đối (không bắt đầu bằng dấu gạch chéo), thì đường dẫn đó sẽ được gọi là đường dẫn tương đối theo gói. Nếu đây là một đường dẫn tuyệt đối, thì đường dẫn này được hiểu là đường dẫn tương đối đến kho lưu trữ.

Tiền tố trong thuộc tính import_prefix được thêm sau khi tiền tố này bị xoá.