프로토콜 버퍼 규칙

규칙

proto_lang_toolchain

규칙 소스 보기
proto_lang_toolchain(name, blacklisted_protos, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, mnemonic, output_files, 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)는 프로토 컴파일러를 호출해야 합니다. 일부 LANG_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

이름: 필수

이 타겟의 고유한 이름입니다.

blacklisted_protos

라벨 목록입니다. 기본값은 []입니다.

blacklisted_protossrcs 속성에 있는 파일에 대해서는 코드가 생성되지 않습니다. 이는 any.proto와 같이 이미 프로토 런타임에 연결된 .proto 파일에 사용됩니다.
command_line

문자열, 필수

이 값은 코드를 생성하기 위해 프로토 컴파일러에 전달됩니다. 이 코드 생성기/플러그인에만 해당하는 부분을 포함합니다 (예: -I 매개변수는 포함하지 않음).
  • $(OUT)은 LANG_proto_library에 따라 다릅니다. 규칙은 이 변수를 해석하는 방법을 정의해야 합니다. 예를 들어 Java의 경우 $(OUT)은 생성할 src-jar 파일 이름으로 대체됩니다.
mnemonic

문자열, 기본값은 "GenProto"입니다.

이 값은 protoc 작업의 니모닉으로 설정됩니다.
output_files

문자열, 기본값은 "legacy"입니다.

command_line$(OUT) 형식을 제어합니다. 단일 파일의 경우 파일 경로로, 여러 파일의 경우 출력 디렉터리로 제어합니다. 가능한 값은 '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 작업의 진행 메시지로 설정됩니다.
proto_compiler

라벨. 기본값은 None입니다.

프로토 컴파일러 실행 파일입니다. 제공된 경우 이 타겟은 코드를 생성하는 proto-compiler로 사용됩니다.
runtime

라벨. 기본값은 None입니다.

생성된 코드가 컴파일되는 언어별 라이브러리입니다. 정확한 동작은 LANG_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, visibility)

지원 중단되었습니다. 대신 https://github.com/bazelbuild/rules_proto를 사용하세요.

proto_library를 사용하여 여러 언어에서 사용할 수 있는 프로토콜 버퍼 라이브러리를 정의합니다. proto_libraryjava_proto_library와 같은 지원되는 규칙의 deps 절에 나열될 수 있습니다.

명령줄에서 컴파일하면 proto_libraryfoo-descriptor-set.proto.bin라는 파일을 만듭니다. 이 파일은 규칙 srcs의 메시지에 대한 설명자 세트입니다. 파일은 직렬화된 FileDescriptorSet이며, 이는 https://developers.google.com/protocol-buffers/docs/techniques#self-description에 설명되어 있습니다.

proto_library 규칙에서 직접 언급한 .proto 파일에 관한 정보만 포함합니다. 전이적 설명자 세트의 컬렉션은 [ProtoInfo].transitive_descriptor_sets Starlark 제공자를 통해 사용할 수 있습니다. ProtoInfo.java의 문서를 참고하세요.

권장 코드 구성:

  • .proto 파일당 하나의 proto_library 규칙
  • foo.proto이라는 파일은 동일한 패키지에 있는 foo_proto이라는 규칙에 있습니다.
  • foo_proto라는 이름의 proto_library을 래핑하는 [language]_proto_libraryfoo_[language]_proto이라고 해야 하며 동일한 패키지에 있어야 합니다.

인수

속성
name

이름: 필수

이 타겟의 고유한 이름입니다.

deps

라벨 목록입니다. 기본값은 []입니다.

타겟이 종속된 다른 proto_library 규칙의 목록입니다. proto_library는 다른 proto_library 타겟에만 종속될 수 있습니다. 언어별 라이브러리에 의존하지 않을 수 있습니다.
srcs

라벨 목록입니다. 기본값은 []입니다.

타겟을 만들기 위해 처리되는 .proto.protodevel 파일 목록입니다. 일반적으로 비어 있지 않은 목록입니다. srcs가 비어 있을 수 있는 사용 사례 중 하나는 alias-library입니다. deps에 하나 이상의 다른 proto_library가 있는 proto_library 규칙입니다. 이 패턴은 영구 이름으로 공개 API를 내보내는 데 사용할 수 있습니다.
allow_exports

라벨. 기본값은 None입니다.

나열된 패키지 중 하나에 없는 lang_proto_library에서 proto 라이브러리가 다시 내보내지거나 사용되지 않도록 하는 선택적 허용 목록입니다.
exports

라벨 목록입니다. 기본값은 []입니다.

프로토 소스에서 'import public'을 통해 참조할 수 있는 proto_library 타겟 목록입니다.
import_prefix

문자열, 기본값은 ""입니다.

이 규칙에서 .proto 파일의 경로에 추가할 접두사입니다.

설정되면 이 규칙의 srcs 속성에 있는 .proto 소스 파일은 이 속성 값이 저장소 상대 경로에 추가된 위치에서 액세스할 수 있습니다.

이 접두사가 추가되기 전에 strip_import_prefix 속성의 접두사가 삭제됩니다.

strip_import_prefix

문자열, 기본값은 ""입니다.

이 규칙에서 .proto 파일의 경로에서 삭제할 접두사입니다.

설정되면 이 규칙의 srcs 속성에 있는 .proto 소스 파일은 이 접두사가 잘린 경로에서 액세스할 수 있습니다.

슬래시로 시작하지 않는 상대 경로인 경우 패키지 상대 경로로 간주됩니다. 절대 경로인 경우 저장소 상대 경로로 이해됩니다.

import_prefix 속성의 접두사는 이 접두사가 삭제된 후에 추가됩니다.