Ошибка при компиляции sbt с помощью scalapb - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь использовать scalapb для генерации case-классов из моего 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).) Мне интересно, какую из них использовать и как ее использовать? метко?

Очень ценится!

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Автор ScalaPB здесь. Около двух лет назад ScalaPB перешел на разработку вне TrueAccord, и в результате мы изменили имена артефактов и пакетов соответственно.

Вы ссылаетесь в своем вопросе на очень старую версию (0.5.26), которая была выпущена до этого перехода. Я бы порекомендовал использовать последнюю версию (0.8.x), следуя инструкциям в нашей документации . Если у вас возникли какие-либо вопросы, не стесняйтесь спрашивать здесь или на нашем канале Gitter.

0 голосов
/ 08 января 2019

за https://scalapb.github.io/migrating.html

Начиная с версии 0.7.0 и далее, артефакты ScalaPB публикуются под идентификатором группы com.thesamet.scalapb вместо идентификатора группы com.trueaccord.scalapb.

Кроме того, все классы в com.trueaccord.scalapb перемещены в пакет верхнего уровня scalapb. В течение 0.7.x мы будем хранить псевдонимы и ссылки типов в исходном расположении com.trueaccord.scalapb, чтобы вы могли получать предупреждения об устаревании, но ваш код вряд ли сломается.

Более того, похоже, что автор хочет, чтобы вы использовали плагин sbt-protoc.

Однако, если вы сочтете необходимым использовать sbt-scalapb, я думаю, что исправление состоит в том, чтобы просто включить плагин в вашей сборке.sbt:

enablePlugin(ScalaPbPlugin)

Источник ScalaPbPlugin показывает, что это не автоматический плагин, поэтому для него потребуется ручное включение.

...