本文档提供了在不同构建系统和编程语言中将 Protocol Buffers 集成到各种项目类型的指南。它涵盖了在您的项目中有效使用 Protocol Buffers 所需的特定配置选项、依赖声明和集成模式。
Protocol Buffers 可以通过多种机制集成到您的项目中
下图说明了 Protocol Buffers 的主要集成点
来源: WORKSPACE1-250 CMakeLists.txt1-350 java/pom.xml1-292 python/google/protobuf/__init__.py1-10
Protocol Buffers 通过仓库中定义的规则提供对 Bazel 的原生支持。
将 Protocol Buffers 添加到您的 Bazel 项目
WORKSPACE 文件http_archive(
name = "com_google_protobuf",
urls = ["https://github.com/protocolbuffers/protobuf/archive/refs/tags/vX.Y.Z.tar.gz"],
strip_prefix = "protobuf-X.Y.Z",
)
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
protobuf_deps()
BUILD 文件中使用 Protocol Buffers 规则load("@com_google_protobuf//bazel:upb_proto_library.bzl", "upb_proto_library")
proto_library(
name = "my_proto",
srcs = ["my.proto"],
)
upb_proto_library(
name = "my_proto_upb",
deps = [":my_proto"],
)
关键 Bazel 规则包括
upb_proto_library - 使用 μpb (upb) 生成 C/C++ 代码upb_proto_reflection_library - 生成反射数据来源: WORKSPACE1-309 bazel/upb_proto_library.bzl1-36
Protocol Buffers 可以通过以下方式与 CMake 项目集成
对于从源代码构建
对于使用预安装的包
关键 CMake 选项包括
protobuf_BUILD_SHARED_LIBS - 构建为共享库(默认:OFF)protobuf_WITH_ZLIB - 启用 ZLIB 支持(默认:ON)protobuf_BUILD_TESTS - 构建测试(默认:ON)protobuf_INSTALL - 安装库和头文件(默认:ON)来源: CMakeLists.txt27-53 CMakeLists.txt159-180
对于使用 Maven 的 Java 项目,请将 Protocol Buffers 依赖项添加到您的 pom.xml
用于附加工具
在构建过程中从 .proto 文件生成 Java 代码
来源: java/pom.xml1-293 java/bom/pom.xml58-75
下图说明了不同编程语言的集成工作流
来源: java/pom.xml7 csharp/src/Google.Protobuf/Google.Protobuf.csproj8 python/google/protobuf/__init__.py10 ruby/google-protobuf.gemspec3 php/ext/google/protobuf/protobuf.h35 Protobuf.podspec8
使用以下方式将 Protocol Buffers 添加到 Java 项目
pom.xml来源: java/pom.xml6-7 java/bom/pom.xml59-73
Install-Package Google.Protobuf -Version 3.31.0
Install-Package Google.Protobuf.Tools -Version 3.31.0
来源: csharp/src/Google.Protobuf/Google.Protobuf.csproj8 csharp/Google.Protobuf.Tools.nuspec8
来源: python/google/protobuf/__init__.py10
来源: ruby/google-protobuf.gemspec2-3
extension=protobuf.so
来源: php/ext/google/protobuf/protobuf.h35
添加到 Podfile
集成 Protocol Buffers 的典型工作流程包括以下步骤
来源: WORKSPACE1-100 CMakeLists.txt1-100 java/pom.xml1-100
下表总结了跨构建系统的关键配置选项
| 功能 | Bazel | CMake | Maven |
|---|---|---|---|
| 共享库 | --compilation_mode=dbg | protobuf_BUILD_SHARED_LIBS=ON | 不适用 |
| ZLIB 支持 | WORKSPACE 中的依赖项 | protobuf_WITH_ZLIB=ON | 不适用 |
| 代码生成 | upb_proto_library | protobuf_generate() | protobuf-maven-plugin |
| 测试 | cc_test 规则 | protobuf_BUILD_TESTS=ON | JUnit 依赖项 |
来源: WORKSPACE35-50 CMakeLists.txt27-53 java/pom.xml67-106
Protocol Buffers 遵循语义化版本控制
| 版本组件 | 含义 | 示例 |
|---|---|---|
| 主版本 (X.y.z) | 破坏性变更 | 3.x.x → 4.x.x |
| 次版本 (x.Y.z) | 新功能(向后兼容) | 4.1.x → 4.2.x |
| 修订版 (x.y.Z) | Bug修复 | 4.1.1 → 4.1.2 |
不同语言的当前版本
集成 Protocol Buffers 有两种常见模式
系统级安装:
项目特定集成:
| 问题 | 常见原因 | 解决方案 |
|---|---|---|
| 版本不匹配 | 运行时库版本与 protoc 版本不匹配 | 确保两者版本相同 |
| 缺少依赖项 | 缺少传递性依赖 | 显式添加所需依赖项 |
| 构建错误 | 错误的构建配置 | 验证构建系统设置 |
| 跨语言问题 | 特定语言的限制 | 使用兼容的 proto 功能 |