使用ScalaPB中的协议缓冲区生成Java和Scala类

使用ScalaPB中的协议缓冲区生成Java和Scala类,java,scala,protocol-buffers,scalapb,Java,Scala,Protocol Buffers,Scalapb,我一直在使用proto定义文件生成Java类。我现在还想生成Scala类。为此,我尝试使用插件。目标是在项目中有一个src/main/protobuf/目录,并根据这些定义生成Java和Scala类 问题是,当我在项目中添加ScalaPB依赖项时,它会停止生成Java类(它只生成Scala case类) 事实上,试图修改任何传统sbt protobuf设置时,总是会出现以下(或类似)错误消息: build.sbt:YYY: error: reference to protocOptions is

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

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

事实上,试图修改任何传统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(..)

我不确定这两个问题是否相关。其想法是更改
协议
,以强制生成Java类

这里要做两件事:

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

    以下是我的构建结构在我调用“sbt编译”之前的样子:

    根据scalapb,您应该在build.sbt中添加
    PB.gens.java
    作为目标,如下所示:

    编译中的PB.targets:=Seq( PB.gens.java->(sourceManaged in Compile).value, gen(javaConversions=true)->(sourceManaged in Compile).value )
    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
    )
    
    ├── build.sbt
    ├── project
    │   ├── build.properties
    │   └── plugin.sbt
    └── src
        └── main
            ├── protobuf
            │   └── types.proto
            └── scala
                └── com
                    └── yyyyy
                        └── test
                            └── Test.scala