我正在尝试使用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.scalapb
(https://scalapb.github.io/sbt-settings.html)和com.trueaccord.scalapb
(https://mvnrepository.com/artifact/com.trueaccord.scalapb)之间,我也不太困惑。我很好奇,应该使用哪个,以及如何适当地使用它?
非常感谢!
答案 0 :(得分:0)
每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)
The ScalaPbPlugin source显示它不是自动插件,因此需要手动启用。
答案 1 :(得分:0)
ScalaPB的作者在这里。大约两年前,ScalaPB已过渡到TrueAccord外部开发,因此,我们随后相应地更改了工件和程序包名称。
您在问题中引用的是此过渡之前发布的非常旧的版本(0.5.26)。我建议按照我们的documentation中的说明使用最新版本(0.8.x)。如果您遇到任何问题,请随时在此处或在我们的Gitter频道上提问。