Quy tắc vùng đệm giao thức

Quy tắc

proto_lang_toolchain

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)

Không dùng nữa. Vui lòng Thay vào đó, hãy truy cập vào https://github.com/bazelbuild/rules_proto.

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

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

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

Ví dụ

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

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

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

String; required

Giá trị này sẽ được chuyể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ợ mã này (ví dụ: không bao gồm các thông số -I)
  • $(OUT) là dành riêng cho lang_proto_library. Các quy tắc này dự kiến sẽ xác định cách chúng 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 giá trị ghi nhớ hành động protoc.
plugin

Label; optional

Nếu được cung cấp, sẽ được cung cấp cho hành động gọi trình biên dịch proto và sẽ được truyề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 duy nhất được thay thế bằng trình bổ trợ có thể 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

Một thư viện dành riêng cho ngôn ngữ mà mã đã tạo được biên dịch dựa trên đó. Hành vi chính xác là dành riêng cho language_proto_library. Ví dụ: Java nên biên dịch theo thời gian chạy.

proto_library

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. Vui lòng sử dụng Thay vào đó, hãy truy cập vào https://github.com/bazelbuild/rules_proto.

Dùng proto_library để xác định thư viện vùng đệm giao thức có thể được sử dụng từ nhiều ngôn ngữ. Một 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 foo-descriptor-set.proto.bin, là mã mô tả được thiết lập cho gửi thông báo mà quy tắc srcs. Tệp này là một FileDescriptorSet đã chuyển đổi 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 sắp xếp mã nên dùng:

  • 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 có tên foo_proto. nằm trong cùng một gói.
  • [language]_proto_library gói proto_library có tên foo_proto phải được gọi 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. proto_library chỉ có thể phụ thuộc vào proto_library mục tiêu. Tính năng 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 những 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 trong đó srcs có thể trống là một alias-library. Đây là một 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 một 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 thông qua tuỳ chọn "nhập công khai" trong proto nguồn.
import_prefix

String; optional

Tiền tố để thêm vào đường dẫn của các 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ẽ là có thể truy cập tại 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 bước này Đã thêm tiền tố.

strip_import_prefix

String; optional

Tiền tố để tách khỏi đường dẫn của các 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ẽ là có thể truy cập trên đường dẫn của họ với tiền tố này được cắt bỏ.

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

Tiền tố trong thuộc tính import_prefix được thêm sau tiền tố này là bị phá hoại.