0

我正在尝试scalapb从我的 protobuf 生成案例类。但是,我目前正在编译错误。

我有我scalapb.sbt的如下:

addSbtPlugin("com.trueaccord.scalapb" % "sbt-scalapb" % "0.5.26")

libraryDependencies ++= Seq(
  "com.trueaccord.scalapb" %% "compilerplugin" % "0.5.26",
  "com.github.os72" % "protoc-jar" % "3.0.0-b2.1"
)

而且,我build.sbt的如下:

// for scalapb

import com.trueaccord.scalapb.{ScalaPbPlugin => PB}

PB.targets in Compile := Seq(
  scalapb.gen() -> (sourceManaged in Compile).value
)

PB.protobufSettings

PB.runProtoc in PB.protobufConfig := (args =>
  com.github.os72.protocjar.Protoc.runProtoc("-v241" +: args.toArray))

libraryDependencies ++= Seq(
    "io.grpc" % "grpc-netty" % "0.14.0",
    "com.trueaccord.scalapb" %% "scalapb-runtime-grpc" % (PB.scalapbVersion in PB.protobufConfig).value
)

另外,我创建了一个示例 .proto 文件src\main\protobuf,如下所示:

syntax = "proto2"

package org.pk.stream.protos

message Tweet {
    required string filter_level = 1;
}

现在,当我尝试时sbt compile,我收到以下错误:

S:\MyRepos\LogStreaming>sbt compile
[info] Loading global plugins from C:\Users\pkumar25\.sbt\0.13\plugins
[info] Loading project definition from S:\MyRepos\RLoggerStreaming\project
S:\MyRepos\LogStreaming\build.sbt:21: error: object trueaccord is not a 
member of package com
import com.trueaccord.scalapb.{ScalaPbPlugin => PB}
           ^
sbt.compiler.EvalException: Type error in expression
[error] sbt.compiler.EvalException: Type error in expression
[error] Use 'last' for the full log.
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? q

有人可以帮我解决这个错误吗?

我对这些scalapb版本com.thesamet.scalapbhttps://scalapb.github.io/sbt-settings.html)和com.trueaccord.scalapbhttps://mvnrepository.com/artifact/com.trueaccord.scalapb)也有点困惑。我很好奇,应该使用哪一个以及如何恰当地使用它?

非常感激!

4

2 回答 2

0

ScalaPB 的作者在这里。大约两年前,ScalaPB 已经过渡到在 TrueAccord 之外开发,因此我们随后相应地更改了工件和包名称。

您在问题中引用了在此过渡之前发布的非常旧的版本(0.5.26)。我建议按照我们文档中的说明使用最新版本 (0.8.x) 。如果您遇到任何问题,请随时在此处或我们的 Gitter 频道提问。

于 2019-01-08T20:09:31.220 回答
-1

根据https://scalapb.github.io/migrating.html

从版本 0.7.0 起,ScalaPB 工件在 com.thesamet.scalapb 组 ID 下发布,而不是在 com.trueaccord.scalapb 组 ID 下发布。

此外,com.trueaccord.scalapb 中的所有类都移到了 scalapb 顶级包中。在 0.7.x 期间,我们将在原始 com.trueaccord.scalapb 位置保留类型别名和引用,因此您可能会收到弃用警告,但您的代码不太可能中断。

此外,作者似乎希望您使用该sbt-protoc插件。

但是,如果您发现有必要使用sbt-scalapb,我认为解决方法是在您的 build.sbt 中启用插件:

enablePlugin(ScalaPbPlugin)

ScalaPbPlugin 源代码显示它不是自动插件,因此需要手动启用。

于 2019-01-07T23:20:27.050 回答