Spec-Zone.ru › Bazel 8.0

Правила Protocol Buffer

Правила

  • cc_proto_library
  • java_lite_proto_library
  • java_proto_library
  • proto_library
  • py_proto_library
  • proto_lang_toolchain
  • proto_toolchain

cc_proto_library

cc_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

cc_proto_library генерирует код C++ из .proto файлов.

deps должно указывать на правила proto_library .

Пример:


cc_library(
    name = "lib",
    deps = [":foo_cc_proto"],
)

cc_proto_library(
    name = "foo_cc_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

Аргументы

Атрибуты
name

Имя; обязательно

Уникальное имя для этой цели.

deps

Список метки; значение по умолчанию []

Список правил proto_library для генерации кода C++.

java_lite_proto_library

java_lite_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_lite_proto_library генерирует Java-код из .proto файлов.

deps должно указывать на правила proto_library .

Пример:


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

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

proto_library(
    name = "bar",
)

Аргументы

Атрибуты
name

Имя; обязательно

Уникальное имя для этой цели.

deps

Список меток; значение по умолчанию []

Список правил proto_library для генерации Java-кода.

java_proto_library

java_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_proto_library генерирует Java-код из .proto файлов.

deps должно указывать на правила proto_library .

Пример:


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

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

proto_library(
    name = "foo_proto",
)

Аргументы

Атрибуты
name

Имя; обязательно

Уникальное имя для этой цели.

deps

Список меток; значение по умолчанию []

Список правил proto_library для генерации Java-кода.

proto_library

proto_library(name, deps, srcs, data, allow_exports, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, import_prefix, licenses, restricted_to, strip_import_prefix, tags, target_compatible_with, testonly, toolchains, visibility)

При использовании Bazel, загрузите правило с https://github.com/bazelbuild/rules_proto.

Используйте proto_library для определения библиотек протобуферов, которые могут использоваться из нескольких языков. Библиотека proto_library может быть указана в deps пункте поддерживаемых правил, таких как java_proto_library.

При компиляции из командной строки proto_library создает файл с именем foo-descriptor-set.proto.bin, который является набором дескрипторов для сообщений, указанных в правиле srcs. Файл является сериализованным FileDescriptorSet, описанным в https://developers.google.com/protocol-buffers/docs/techniques#self-description.

Он содержит только информацию о .proto файлах, напрямую указанных правилом proto_library; коллекция транзитивных наборов дескрипторов доступна через [ProtoInfo].transitive_descriptor_sets провайдер Starlark. См. документацию в proto_info.bzl.

Рекомендуемая организация кода:

  • Одно правило proto_library на файл .proto.
  • Файл с именем foo.proto будет находиться в правиле с именем foo_proto, который находится в той же папке.
  • Правило [language]_proto_library которое оборачивает правило proto_library с именем foo_proto должно называться foo_[language]_proto, и находиться в той же папке.

Аргументы

Атрибуты
name

Имя; обязательно

Уникальное имя для этой цели.

deps

Список меток; значение по умолчанию []

Список других правил proto_library от которых зависит цель. Правило proto_library может зависеть только от других целей proto_library. Оно не может зависеть от языковых библиотек.
srcs

Список меток; значение по умолчанию []

Список файлов .proto и .protodevel которые обрабатываются для создания цели. Обычно это не пустой список. Один из вариантов использования, где srcs может быть пустым – это alias-library. Это правило proto_library, содержащее одно или несколько других правил proto_library в deps. Этот шаблон можно использовать для экспорта публичного API под постоянным именем.
allow_exports

Метка; значение по умолчанию None

Необязательный список разрешений, который предотвращает повторный экспорт или использование библиотеки протобуфера в lang_proto_library, которая не входит в один из перечисленных пакетов.
exports

Список меток; значение по умолчанию []

Список целей proto_library, которые могут быть проинициализированы через "импорт публичный" в источнике proto. Ошибка, если вы используете "импорт публичный", но не указали соответствующую библиотеку в атрибуте exports. Обратите внимание, что вам необходимо указать библиотеку как в атрибуте deps, так и в атрибуте exports, так как не все реализации lang_proto_library еще изменены.
import_prefix

Строка; значение по умолчанию ""

Префикс, добавляемый к путям файлов .proto в этом правиле.

При установке, файлы .proto исходного кода в атрибуте srcs этого правила доступны по пути, к которому добавлен префикс, указанный в этом атрибуте, относительно пути репозитория.

Префикс в атрибуте strip_import_prefix удаляется перед добавлением этого префикса.

strip_import_prefix

Строка; значение по умолчанию "/"

Префикс, удаляемый из путей файлов .proto в этом правиле.

При установке, файлы .proto исходного кода в атрибуте srcs этого правила доступны по их пути с удаленным префиксом.

Если это относительный путь (не начинающийся с слеша), он рассматривается как относительный к пакету. Если это абсолютный путь, он рассматривается как относительный к репозиторию.

Префикс в атрибуте import_prefix добавляется после удаления этого префикса.

py_proto_library

py_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Используйте `py_proto_library` для генерации библиотек Python из файлов `.proto`. Конвенция – называть правило `py_proto_library` `foo_py_pb2`, когда оно оборачивает правило `proto_library` `foo_proto`. `deps` должно указывать на правило `proto_library`. Пример: ```starlark py_library( name = "lib", deps = [":foo_py_pb2"], ) py_proto_library( name = "foo_py_pb2", deps = [":foo_proto"], ) proto_library( name = "foo_proto", srcs = ["foo.proto"], ) ```

Аргументы

Атрибуты
name

Имя; обязательно

Уникальное имя для этой цели.

deps

Список меток; значение по умолчанию []

Список правил `proto_library` для генерации библиотек Python. Обычно это только одна цель: интересующая библиотека протобуфера. Это может быть любая цель, предоставляющая `ProtoInfo`.

proto_lang_toolchain

proto_lang_toolchain(name, allowlist_different_package, blacklisted_protos, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, mnemonic, output_files, plugin, plugin_format_flag, progress_message, protoc_minimal_do_not_use, restricted_to, runtime, tags, target_compatible_with, testonly, toolchain_type, toolchains, visibility)

При использовании Bazel, загрузите правило с https://github.com/bazelbuild/rules_proto.

Указывает, как правило LANG_proto_library (например, java_proto_library) должно вызывать компилятор протобуфера. Некоторые правила LANG_proto_library позволяют указать используемую цепочку инструментов с помощью флагов командной строки; обратитесь к их документации.

Обычно вам не следует создавать такие правила, если вы не хотите настроить свой Java-компилятор.

END_OF_DOCUMENT_MARKER

Компилятор отсутствует. Протокомпилятор взят из правила 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

Имя; необходимо

Уникальное имя для этой цели.

allowlist_different_package

Метка; значение по умолчанию None

blacklisted_protos

Список меток; значение по умолчанию []

Для файлов в атрибуте srcs правила blacklisted_protos не будет генерироваться код. Это используется для файлов .proto, которые уже связаны с прото-временно́й средой, такими как any.proto.
command_line

Строка; необходимо

Это значение будет передано протокомпилятору для генерации кода. Включайте только части, специфичные для этого кодогенератора/плагина (например, не включайте параметры -I).
  • $(OUT) специфично для LANG_proto_library. Ожидается, что правила определят, как они интерпретируют эту переменную. Например, для Java $(OUT) будет заменено именем файла src-jar для создания.
mnemonic

Строка; значение по умолчанию "GenProto"

Это значение будет установлено в качестве мнемоники для действия protoc.
output_files

Строка; значение по умолчанию "legacy"

Управляет форматированием $(OUT) в command_line, либо путём указания пути к одному файлу, либо выходной директории в случае нескольких файлов. Возможные значения: "single", "multiple".
plugin

Метка; значение по умолчанию None

Если указано, будет доступно действию, вызывающему протокомпилятор, и будет передано протокомпилятору: --plugin=protoc-gen-PLUGIN=<executable>.
plugin_format_flag

Строка; значение по умолчанию ""

Если указано, это значение будет передано протокомпилятору для использования плагина. Значение должно содержать единственный %s, который заменяется исполняемым файлом плагина. --plugin=protoc-gen-PLUGIN=<executable>.
progress_message

Строка; значение по умолчанию "Generating proto_library %{label}"

Это значение будет установлено в качестве сообщения о ходе выполнения для действия protoc.
protoc_minimal_do_not_use

Метка; значение по умолчанию None

runtime

Метка; значение по умолчанию None

Языковая библиотека, к которой компилируется сгенерированный код. Точное поведение зависит от LANG_proto_library. Например, для Java должен быть скомпилирован по отношению к временно́й среде.
toolchain_type

Метка; значение по умолчанию None

proto_toolchain

proto_toolchain(name, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, mnemonic, output_files, progress_message, proto_compiler, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

Аргументы

Атрибуты
name

Имя; необходимо

Уникальное имя для этой цели.

command_line

Строка; значение по умолчанию "--descriptor_set_out=%s"

mnemonic

Строка; значение по умолчанию "GenProtoDescriptorSet"

output_files

Строка; значение по умолчанию "single"

progress_message

Строка; значение по умолчанию "Generating Descriptor Set proto_library %{label}"

proto_compiler

Метка; значение по умолчанию None

За исключением случаев, когда указано иначе, содержимое этой страницы лицензируется по лицензии Creative Commons Attribution 4.0, а примеры кода — по лицензии Apache 2.0. Подробности см. в политике Google Developers. Java — зарегистрированный товарный знак Oracle и/или её аффилированных компаний.

Последнее обновление 2024-12-10 UTC.

Licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License.
https://bazel.build/versions/8.0.0/reference/be/protocol-buffer

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API