使用ScalaPB中的Protocol Buffers生成Java和Scala类

时间:2016-02-09 21:54:52

标签: java scala protocol-buffers scalapb

我一直在使用sbt-protobuf从proto定义文件生成Java类。我现在也想生成Scala类。为此,我尝试使用ScalaPB插件。目标是在项目中有一个src/main/protobuf/目录,并从这些定义生成Java和Scala类。

问题是,当我在项目中添加ScalaPB依赖项时,它会停止生成Java类(它只生成Scala案例类)。

事实上,尝试修改任何传统的sbt-protobuf设置,总会导致此(或类似)错误消息:

build.sbt:YYY: error: reference to protocOptions is ambiguous;
it is imported twice in the same scope by
import _root_.sbtprotobuf.ProtobufPlugin._
and import _root_.com.trueaccord.scalapb.ScalaPbPlugin._
    protocOptions in SPB.protobufConfig ++= Seq(..)

我不确定这两个问题是否相关。我们的想法是更改protocOptions以强制生成Java类。

1 个答案:

答案 0 :(得分:3)

这里有两件事要做:

  1. PB.javaConversions in PB.protobufConfig := true设置为true
  2. 确保在项目中执行clean。如果已经存在,ScalaPB将不会重新生成类文件。如果要进行新配置,请确保清除以前的协议缓冲区。
  3. 这是一个示例(build.sbt)项目,它将生成Java和Scala类(使用SBT 0.13.5):

    import com.trueaccord.scalapb.{ScalaPbPlugin => PB}
    
    name  :=  "proto-buf-test"
    
    scalaVersion := "2.10.5"
    
    autoCompilerPlugins in Global := true
    
    lazy val root = project.in(file(".")).settings(PB.protobufSettings:_*).settings(
         PB.javaConversions in PB.protobufConfig := true
    )
    

    在我调用“sbt compile”之前,我的构建结构是这样的:

    ├── build.sbt
    ├── project
    │   ├── build.properties
    │   └── plugin.sbt
    └── src
        └── main
            ├── protobuf
            │   └── types.proto
            └── scala
                └── com
                    └── yyyyy
                        └── test
                            └── Test.scala