SBT 无法将 Seq[Object] 附加到 Seq[ModuleID]

SBT cannot append Seq[Object] to Seq[ModuleID]

SBT 一直因不正确的附加错误而失败。我使用的是我见过无数次的构建文件的确切格式。

build.sbt:

lazy val backend = (project in file("backend")).settings(
name := "backend",
libraryDependencies ++= (Dependencies.backend)
).dependsOn(api).aggregate(api)

dependencies.scala:

import sbt._

object Dependencies {

lazy val backend = common ++ metrics

val common = Seq(
"com.typesafe.akka" %% "akka-actor" % Version.akka,
"com.typesafe.akka" %% "akka-cluster" % Version.akka,
"org.scalanlp.breeze" %% "breeze" % Version.breeze,
"com.typesafe.akka" %% "akka-contrib" % Version.akka,
"org.scalanlp.breeze-natives" % Version.breeze,
"com.google.guava" % "guava" % "17.0"
)

val metrics = Seq("org.fusesource" % "sigar" % "1.6.4")

我不太明白为什么 SBT 会抱怨

error: No implicit for Append.Values[Seq[sbt.ModuleID], Seq[Object]] found,
so Seq[Object] cannot be appended to Seq[sbt.ModuleID]
libraryDependencies ++= (Dependencies.backend)
                    ^

commonmetrics 之一不是 Seq[sbt.ModuleID]。您可以通过类型说明找到哪个:

val common: Seq[sbt.ModuleID] = ...
val metrics: Seq[sbt.ModuleID] = ...

我的钱在 common,这一行没有足够的 %s:

"org.scalanlp.breeze-natives" % Version.breeze

精简版 (TL;DR)

common 中出现错误:您要替换此行

"org.scalanlp.breeze-natives" % Version.breeze,

用这条线

"org.scalanlp" %% "breeze-natives" % Version.beeze,

长版

  1. "org.scalanlp.breeze-natives" % Version.breezeGroupArtifactID 而不是 ModuleID

  2. 这会导致 common 变成 Seq[Object] 而不是 Seq[ModuleID]

  3. 因此也 Dependencies.backend 成为 Seq[Object]

  4. 最终不能(通过++=)附加到libraryDependencies(定义为SettingKey[Seq[ModuleID]]),因为没有可用的Append.Values[Seq[sbt.ModuleID], Seq[Object]].