【问题标题】:Generate both Java and Scala classes using Protocol Buffers in ScalaPB使用 ScalaPB 中的协议缓冲区生成 Java 和 Scala 类
【发布时间】:2016-05-20 01:57:18
【问题描述】:

我一直在使用sbt-protobuf 从原型定义文件生成 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 类。

【问题讨论】:

    标签: java scala protocol-buffers scalapb


    【解决方案1】:

    这里有两件事要做:

    1. PB.javaConversions in PB.protobufConfig := true 设置为true
    2. 确保在您的项目上使用clean。如果类文件已经存在,ScalaPB 将不会重新生成它们。如果您希望进行新配置,请确保清除以前的协议缓冲区。

    这是一个示例 (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
    

    【讨论】:

      【解决方案2】:

      根据 scalapb readme,您应该像这样在 build.sbt 中添加 PB.gens.java 作为目标:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-04
        • 2022-08-19
        • 2010-09-25
        • 1970-01-01
        • 2021-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多