SBT Settings

Basic Installation#

To automatically generate Scala case classes for your messages add ScalaPB's sbt plugin to your project. Create a file named project/plugins.sbt containing the following line (or add the following lines if a file with this name already exists):

addSbtPlugin("com.thesamet" % "sbt-protoc" % "1.0.6")
libraryDependencies += "com.thesamet.scalapb" %% "compilerplugin" % "0.11.11"

Add the following line to your build.sbt:

Compile / PB.targets := Seq(
scalapb.gen() -> (Compile / sourceManaged).value / "scalapb"
)

Running the compile command in sbt will generate Scala sources from your protos and compile them. If you just want to generate Scala sources for your protocol buffers without compiling them, run protocGenerate.

Additionally, if you need customizations from scalapb/scalapb.proto or anything from google/protobuf/*.proto, add the following to your build.sbt:

libraryDependencies += "com.thesamet.scalapb" %% "scalapb-runtime" % scalapb.compiler.Version.scalapbVersion % "protobuf"

Defaults#

The plugin assumes your proto files are under src/main/protobuf, however this is configurable using the Compile / PB.protoSources setting.

By default, sbt-protoc invokes protoc 3.x that is shipped with protoc-jar. If you would like to run a different version of protoc:

PB.protocVersion := "-v3.11.4"

See all available options in sbt-protoc documentation

Java Conversions#

To enable Java conversions add the following to your build.sbt:

Compile / PB.targets := Seq(
PB.gens.java -> (Compile / sourceManaged).value,
scalapb.gen(javaConversions=true) -> (Compile / sourceManaged).value
)

gRPC#

Generating gRPC stubs for services is enabled by default. To disable:

Compile / PB.targets := Seq(
scalapb.gen(grpc=false) -> (Compile / sourceManaged).value
)

Additional options to the generator#

scalapb.gen(
flatPackage: Boolean = false,
javaConversions: Boolean = false,
grpc: Boolean = true,
singleLineToProtoString: Boolean = false,
asciiFormatToString: Boolean = false,
lenses: Boolean = true,
retainSourceCodeInfo: Boolean = false
)
OptionscalapbcDescription
flatPackageflat_packageWhen set, ScalaPB will not append the protofile base name to the package name.
javaConversionsjava_conversionsGenerates in the companion object two functions, toJavaProto and fromJavaProto that convert between the Scala case class and the Java protobufs. For the generated code to compile, the Java protobuf code need to be also generated or available as a library dependency.
grpcgrpcGenerates gRPC code for services. Default is true in scalapb.gen, and need to be explicitly specified in scalapbc.
singleLineToProtoStringsingle_line_to_proto_stringBy default, ScalaPB generates a toProtoString() method that renders the message as a multi-line format (using TextFormat.printToUnicodeString). If set, ScalaPB generates toString() methods that use the single line format.
asciiFormatToStringascii_format_to_stringSetting this to true, overrides toString to return a standard ASCII representation of the message by calling toProtoString.
lensesno_lensesBy default, ScalaPB generates lenses for each message for easy updating. If you are not using this feature and would like to reduce code size or compilation time, you can set this to false and lenses will not be generated.
retainSourceCodeInforetain_source_code_infoRetain source code information (locations, comments) provided by protoc in the descriptors. Use the location accessor to get that information from a descriptor.
scala3Sourcesscala3_sourcesIf set, generates sources that are error-free under -source future with Scala 3, or Xsource:3 with Scala 2.13.