当前位置: 首页 > 知识库问答 >
问题:

尝试编译SBT项目时,ScalaPB不起作用。编译失败并带有“对象gen不是包skapb的成员”

养研
2023-03-14

我想在我的SBT项目中使用ScalaPB插件。但是,当我试图编译该项目时,我得到一个错误,该错误表明“object 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")

这是构建。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干净编译

但我得到的却是stacktrace

/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个答案

江衡
2023-03-14

您将ScalaPB的编译器插件(“com.thesamet.ScalaPB”%%“compilerplugin”%scalaPbcVersion)作为项目的库依赖项。编译器插件需要是构建项目的依赖项。为了实现这一点,需要将其作为库依赖项添加到项目/插件中。sbt。

 类似资料:
  • 你好自从我第一次尝试运行命令“mvn clean install”以来,一直出现此错误: [INFO]构建失败[INFO] - [INFO]总时间:41.009 s [INFO]完成时间:2022-09-24t 11:12:43-03:00[INFO]-[ERROR]未能执行目标org . Apache . maven . plugins:maven-compiler-plugin:3 . 8 .

  • 我使用vs代码,并且已经安装了“vs代码的Lombok注释支持”。我使用maven clear然后进行编译,结果编译失败。然后,当我尝试maven编译几秒钟后,它构建成功。我在两个maven编译之间没有执行任何操作。 我检查了错误消息,似乎Lombok注释不起作用。 当它成功的时候,我得到了信息 而我的pom.xml是 我想知道我应该把插件版本改成旧版本吗?但当我将其更改为3.1.0时,就会出现C

  • 我已经在github的TopNotch项目上做了git克隆,并希望将这个sbt项目导入IntelliJ。 请建议如何导入项目。 谢谢你。

  • 问题内容: 我正在尝试反编译 Java项目(.jar)文件,并且能够从其中获取.java文件。现在如何将其编译回来?我可以将.java文件作为单个文件添加到Netbeans。但是如何将其作为项目添加并编译呢?该项目是JavaFX项目。所以请帮我。 问题答案: 有很多方法可以实现此目的,但是我认为您不能像这样直接在框内(在本例中为开箱)将项目导入jar中。 我们可以使用最基本的技术(我承认有点脏),

  • 我有一个简单的JNI.dll,试图在测试Java应用程序中使用它。它是一个文件,由几个函数组成,头部由生成。(我正在使用MinGW btw编译) 如果我用GCC编译并链接这段代码,我就可以很好地用system.loadLibrary()加载.dll并使用它。但是,如果我用G++编译它,将失败,出现可怕的“UnsatisfiedLinkError”。 g++-wl,--add-stdcall-ali

  • 我有一个Java FX项目,正在使用maven 3.0.5进行构建。当我运行mvn package/install时,项目失败并抱怨包javafx.*不存在。据我所知,Javafx是用Java1.7封装的,所以构建过程中不采用这一点是没有意义的。当我在IDE(intellij)中编译它时,它工作得很好,然后我的maven构建也成功安装了,但是我不希望每次进行干净的安装时都要经历IDE。有什么想法吗