ScalaPB не работает при попытке скомпилировать проект SBT.Сбой компиляции с "object gen не является членом пакета scalapb" - PullRequest
0 голосов
/ 28 марта 2019

Я хочу использовать плагин ScalaPB в моем проекте SBT.Но когда я пытаюсь скомпилировать проект, я получаю сообщение об ошибке, в котором говорится, что «объект gen не является членом пакета scalapb».Так как мне настроить этот плагин для работы с моим проектом?

Я следовал инструкциям на странице Github, и он не работал.

Мой проект имеет следующую структуру, другими словамистандартная структура проекта Maven:

.
├── build.sbt
├── ci
│   └── checkstyle
├── LICENSE
├── project
│   ├── build.properties
│   ├── Dependencies.scala
│   ├── plugins.sbt
│   ├── project
│   └── target
├── src
│   ├── main
│   └── test
└── version.sbt

Это файл Dependencies.scala:

import sbt._

object Dependencies {

  lazy val scalatestVersion = "3.0.5"
  lazy val scalamockVersion = "4.1.0"
  lazy val scalaPbcVersion = "0.8.3"

  // Libraries for Protobuf
  val scalaPbc = "com.thesamet.scalapb" %% "compilerplugin" % scalaPbcVersion

  // Libraries for Testing
  val scalatest = "org.scalatest" %% "scalatest" % scalatestVersion % Test
  val scalamock = "org.scalamock" %% "scalamock" % scalamockVersion % Test

  // Projects
  val groupBackendDependencies = Seq(
    scalatest, scalamock, scalaPbc)
}

Это файл plugins.sbt:

// The Typesafe repository
resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/maven-releases/"

// for autoplugins
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.6" withSources())

dependencyOverrides += "com.puppycrawl.tools" % "checkstyle" % "8.12"

// Scala checkstyle
addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0")

// Scala Protobuf
addSbtPlugin("com.thesamet" % "sbt-protoc" % "0.99.19")

Thisэто файл build.sbt.Именно здесь происходит ошибка.


/** ****************************************************************************
  * <REDACTED>
  * ****************************************************************************
  */
enablePlugins(UniversalPlugin)

/** ****************************************************************************
  * Application related configurations
  * ****************************************************************************
  */
organization := "<REDACTED>"
name := "<REDACTED>"
packageName := "<REDACTED>"

/** ****************************************************************************
  * Compilation related
  * ****************************************************************************
  */

scalaVersion := "2.12.7"
scalacOptions ++= Seq("-target:jvm-1.8",
  "-unchecked",
  "-deprecation",
  "-encoding", "utf8",
  "-feature",
  "-Ywarn-adapted-args",
  "-Ywarn-dead-code")

javacOptions in(Compile, compile) ++= Seq("-source", "11",
  "-target", "11",
  "-g:lines")

logLevel := sbt.Level.Warn
exportJars := true
libraryDependencies ++= Dependencies.groupBackendDependencies

/** ****************************************************************************
  * Packaging related configurations
  * ****************************************************************************
  */
packageName in Universal := s"${packageName.value}-${version.value}"
exportJars := true

//By default, the dist task will include the API documentation in the generated package.
//Below instruction will exclude them/
sources in(Compile, doc) := Seq.empty
publishArtifact in(Compile, packageDoc) := false

/** ****************************************************************************
  * CI : Scala Checkstyle
  * Ref: http://www.scalastyle.org/sbt.html
  * Usage: sbt scalastyle
  * ****************************************************************************
  */
lazy val scalaCheckstyle = "ci/checkstyle/scala/scalastyle-config.xml"
scalastyleConfig := baseDirectory(_ / scalaCheckstyle).value
scalastyleFailOnWarning := true

/** ****************************************************************************
  * CI : Pipeline Simulation
  * Usage: sbt pipeline-ci
  * ****************************************************************************
  */
commands += Command.command("pipeline-ci") { state =>
  "clean" ::
    "compile" ::
    "test" ::
    state
}

/**
 * The error occurs here.
 */

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

Я ожидаю, что этот проект должен компилироваться без ошибок при запуске

sbt clean compile

Но вместо этого я получаю эту трассировку стека

/home/my-project/build.sbt:73: error: object gen is not a member of package scalapb
  scalapb.gen() -> (sourceManaged in Compile).value
          ^
[error] Type error in expression

1 Ответ

1 голос
/ 29 марта 2019

Вы включаете плагин компилятора ScalaPB ("com.thesamet.scalapb" %% "compilerplugin"% scalaPbcVersion) как библиотечную зависимость вашего проекта.Плагин компилятора должен быть зависимым от вашего проекта сборки.Для этого его необходимо добавить как библиотечную зависимость в project/plugins.sbt.

...