使用ScalaPB中的协议缓冲区生成Java和Scala类
我一直在使用proto定义文件生成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
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.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