2

我一直在使用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 类。

4

2 回答 2

3

这里要做两件事:

  1. 设置PB.javaConversions in PB.protobufConfig := 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
于 2016-02-10T00:57:38.310 回答
2

根据 scalapb自述文件,您应该PB.gens.java像这样在 build.sbt 中添加目标:

PB.targets in Compile := Seq(
  PB.gens.java -> (sourceManaged in Compile).value,
  scalapb.gen(javaConversions = true) -> (sourceManaged in Compile).value
)
于 2021-01-14T20:55:45.970 回答