为什么启用 play.PlayScala 插件会导致 "sbt.compiler.EvalException: Type error in expression"?

Why does enabling play.PlayScala plugin lead to "sbt.compiler.EvalException: Type error in expression"?

我正在尝试将 play scala 添加为 build.sbt 中的依赖项:

name := "name" 

version := "0.0" 

lazy val root = (project in file(".")).enablePlugins(play.PlayScala)

scalaVersion := "2.11.2" 

resolvers += Resolver.mavenLocal

organization := "com.suredbits.core"

libraryDependencies ++= {  
    val sprayV = "1.3.2"
    val akkaV = "2.3.8" 
    Seq(
      "org.scalatest" % "scalatest_2.11" % "2.2.0",
      "io.spray"            %%  "spray-can"     % sprayV withSources() withJavadoc(),
    "io.spray"            %%  "spray-routing" % sprayV withSources() withJavadoc(),
    "io.spray"            %%  "spray-testkit" % sprayV  % "test" withSources() withJavadoc(),
    "com.typesafe.akka"   %%  "akka-actor"    % akkaV withSources() withJavadoc(),
    "com.typesafe.akka"   %%  "akka-testkit"  % akkaV   % "test" withSources() withJavadoc(),
    "org.specs2"          %%  "specs2-core"   % "2.4.7-scalaz-7.0.6" % "test" withSources() withJavadoc(),
      "org.scalactic"               %%  "scalactic" %   "2.2.1" % "test" withSources() withJavadoc(),
      "io.spray" %%  "spray-json" % "1.3.0" withSources() withJavadoc(),
      "com.github.nscala-time" %% "nscala-time" % "1.6.0" withSources() withJavadoc() ,
    "com.novocode" % "junit-interface" % "0.10" % "test" withSources() withJavadoc(),
      "ch.qos.logback" % "logback-classic" % "0.9.28" % "test" withSources() withJavadoc(),
    "org.slf4j" % "slf4j-nop" % "1.6.4" withSources() withJavadoc()
    )
}

testOptions += Tests.Argument(TestFrameworks.JUnit, "-q", "-v", "-s", "-a")

parallelExecution in Test := false

logBuffered := false

scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature")

这是我的 plugins.sbt:

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

//workaround for enablePlugins error in sbt  
//dependencyOverrides += "org.scala-sbt" % "sbt" % "0.13.7"

//Play sbt plugin for Play projects
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.6")

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")

最后这是我的 build.properties

sbt.version=0.13.1

我已经阅读了很多试图解决这个问题的 Whosebug 帖子,包括删除 ~/.sbt 目录,然后再次 运行 sbt,但这没有用。

报错信息如下:

lazy val root = (project in file(".")).enablePlugins(play.PlayScala)
                                                          ^
sbt.compiler.EvalException: Type error in expression
    at sbt.compiler.Eval.checkError(Eval.scala:384)
    at sbt.compiler.Eval.compileAndLoad(Eval.scala:183)
    at sbt.compiler.Eval.evalCommon(Eval.scala:152)
    at sbt.compiler.Eval.evalDefinitions(Eval.scala:122)
    at sbt.EvaluateConfigurations$.evaluateDefinitions(EvaluateConfigurations.scala:272)
    at sbt.EvaluateConfigurations$.evaluateSbtFile(EvaluateConfigurations.scala:110)
    at sbt.Load$.sbt$Load$$loadSettingsFile(Load.scala:710)
    at sbt.Load$$anonfun$sbt$Load$$memoLoadSettingsFile.apply(Load.scala:715)
    at sbt.Load$$anonfun$sbt$Load$$memoLoadSettingsFile.apply(Load.scala:714)
    at scala.Option.getOrElse(Option.scala:120)
    at sbt.Load$.sbt$Load$$memoLoadSettingsFile(Load.scala:714)
    at sbt.Load$$anonfun$loadFiles.apply(Load.scala:721)
    at sbt.Load$$anonfun$loadFiles.apply(Load.scala:721)
    at scala.collection.TraversableLike$$anonfun$map.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map.apply(TraversableLike.scala:244)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at sbt.Load$.loadFiles(Load.scala:721)
    at sbt.Load$.discoverProjects(Load.scala:732)
    at sbt.Load$.discover(Load.scala:545)
    at sbt.Load$.loadTransitive(Load.scala:574)
    at sbt.Load$.loadProjects(Load.scala:442)
    at sbt.Load$.loadUnit(Load.scala:446)
    at sbt.Load$$anonfun$$anonfun$apply.apply(Load.scala:281)
    at sbt.Load$$anonfun$$anonfun$apply.apply(Load.scala:281)
    at sbt.BuildLoader$$anonfun$componentLoader$$anonfun$apply$$anonfun$apply$$anonfun$apply.apply(BuildLoader.scala:91)
    at sbt.BuildLoader$$anonfun$componentLoader$$anonfun$apply$$anonfun$apply$$anonfun$apply.apply(BuildLoader.scala:90)
    at sbt.BuildLoader.apply(BuildLoader.scala:140)
    at sbt.Load$.loadAll(Load.scala:334)
    at sbt.Load$.loadURI(Load.scala:289)
    at sbt.Load$.load(Load.scala:285)
    at sbt.Load$.load(Load.scala:276)
    at sbt.Load$.apply(Load.scala:130)
    at sbt.Load$.defaultLoad(Load.scala:36)
    at sbt.BuiltinCommands$.doLoadProject(Main.scala:481)
    at sbt.BuiltinCommands$$anonfun$loadProjectImpl.apply(Main.scala:475)
    at sbt.BuiltinCommands$$anonfun$loadProjectImpl.apply(Main.scala:475)
    at sbt.Command$$anonfun$applyEffect$$anonfun$apply.apply(Command.scala:58)
    at sbt.Command$$anonfun$applyEffect$$anonfun$apply.apply(Command.scala:58)
    at sbt.Command$$anonfun$applyEffect$$anonfun$apply.apply(Command.scala:60)
    at sbt.Command$$anonfun$applyEffect$$anonfun$apply.apply(Command.scala:60)
    at sbt.Command$.process(Command.scala:92)
    at sbt.MainLoop$$anonfun$$anonfun$apply.apply(MainLoop.scala:98)
    at sbt.MainLoop$$anonfun$$anonfun$apply.apply(MainLoop.scala:98)
    at sbt.State$$anon.process(State.scala:184)
    at sbt.MainLoop$$anonfun.apply(MainLoop.scala:98)
    at sbt.MainLoop$$anonfun.apply(MainLoop.scala:98)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
    at sbt.MainLoop$.next(MainLoop.scala:98)
    at sbt.MainLoop$.run(MainLoop.scala:91)
    at sbt.MainLoop$$anonfun$runWithNewLog.apply(MainLoop.scala:70)
    at sbt.MainLoop$$anonfun$runWithNewLog.apply(MainLoop.scala:65)
    at sbt.Using.apply(Using.scala:24)
    at sbt.MainLoop$.runWithNewLog(MainLoop.scala:65)
    at sbt.MainLoop$.runAndClearLast(MainLoop.scala:48)
    at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:32)
    at sbt.MainLoop$.runLogged(MainLoop.scala:24)
    at sbt.StandardMain$.runManaged(Main.scala:53)
    at sbt.xMain.run(Main.scala:28)
    at xsbt.boot.Launch$$anonfun$run.apply(Launch.scala:57)
    at xsbt.boot.Launch$.withContextLoader(Launch.scala:77)
    at xsbt.boot.Launch$.run(Launch.scala:57)
    at xsbt.boot.Launch$$anonfun$explicit.apply(Launch.scala:45)
    at xsbt.boot.Launch$.launch(Launch.scala:65)
    at xsbt.boot.Launch$.apply(Launch.scala:16)
    at xsbt.boot.Boot$.runImpl(Boot.scala:32)
    at xsbt.boot.Boot$.main(Boot.scala:21)
    at xsbt.boot.Boot.main(Boot.scala)
[error] sbt.compiler.EvalException: Type error in expression
[error] Use 'last' for the full log.

enablePluginssbt.Project 中不可用,直到 sbt 0.13.5.

要升级,请在 project/build.properties 中执行以下操作:

sbt.version=0.13.5

不要忘记停止 sbt 并重新开始(否则将无法识别版本更改)。

对于 Play 2.2.x 项目,您将替换

lazy val root = (project in file(".")).enablePlugins(play.PlayScala)

play.Project.playScalaSettings

我很确定 Play 2.2.x 使用的 Akka (2.2.x) 版本与您正在使用的版本 (2.3.8) 不兼容。您可能会考虑只使用最新的 Play 2.3.7。如果你选择这条路线,你还需要升级到 sbt 0.13.5(甚至是最新的 0.13.7)。