ScalaPB是Scala语言的一个protocol buffer编译器(protoc)插件。它将为protocol buffer自动生成Scala case类、解析器和序列化。
ScalaPB托管在GitHub上。
主要特点
- 建立在谷歌的protocolbuffer编译器之上,以确保与语言规范的完美兼容性。
- 支持proto2和proto3。
- 使用lenses可以方便地进行嵌套更新:
val newOrder = order.update(_.creditCard.expirationYear := 2015)
- 生成的case classes可以和java生成的代码共存(类名不冲突)。这允许从java到Scala的过渡。
- 可以在protocol buffer的Java生成代码和Scala生成代码之间选择性地生成转换方法。这使您逐步迁移项目成为可能。
- New:支持protocol buffers 2.6.0中介绍过的oneof。
- Newer:支持Scala.js(0.5.X)。
- 更新:支持GRPC(0.5.X)。
- Newest:支持sparksql(0.5.23)。
- Newest:支持和JSON的相互转换(0.5 x)。
- Newest:支持用户自定义选项(0.5.29)。
Installing in SBT (推荐!)
添加ScalaPB的SBT插件到你的项目中以自动为message生成Scala类。创建文件project/ scalapb.sbt并添加以下内容:
addSbtPlugin("com.thesamet" % "sbt-protoc" % "0.99.12")
libraryDependencies += "com.trueaccord.scalapb" %% "compilerplugin" % "0.6.6"
添加下面内容到你的build.sbt:
PB.targets in Compile := Seq(
scalapb.gen() -> (sourceManaged in Compile).value
)
// (optional) If you need scalapb/scalapb.proto or anything from
// google/protobuf/*.proto
libraryDependencies += "com.trueaccord.scalapb" %% "scalapb-runtime" % com.trueaccord.
scalapb.compiler.Version.scalapbVersion % "protobuf"
ScalaPB会查找在src/main/protobuf中的protocol buffer文件,但这是可以个性化定制的。在SBT中运行compile命令在将会从protos文件生成Scala源码并编译。
更多配置选项,参见 ScalaPB SBT Settings。
使用spbc独立运行
如果你想不通过SBT将protocol buffer编译成Scala,可以使用spbc(ScalaPB编译器)。
第一步,从 ScalaPB releases page on Github下载最新版本。
解压文件,你会发现两个脚本:bin/spbc (和bin/spbc.bat),可以分别在Unix / Linux和Mac OS X操作系统(Windows)上使用。
Spbc的使用和protoc完全一样。事实上,spbc调用protoc,通过protoc传给spbc一个脚本作为Scala插件。
下面是一个通过命令行方式调用它的示例:
bin/spbc my.proto --scala_out=.
如果你想使用附加选项,如java_conversions,flat_package,或single_line_to_string,可以这样做:
bin/spbc my.proto --scala_out=OPT1,OPT2:path/to/output/dir/
OPT1,OPT2是使用逗号分隔选项列表。例如:
bin/spbc my.proto --scala_out=flat_package,java_conversions:.
英文原文地址:
https://scalapb.github.io/
本文为个人翻译文档,转载请注明出处!