spray.io如何使用scala 2.11.1 akka 2.3.2

宇宙人*_*宇宙人 4 scala spray spray-client

我想使用spala 2.11.x akka 2.3.x的spray.io,我在spray.io的Project Info页面中找到以下内容:

spray 1.3.1 is built against Scala 2.10.3 and Akka 2.3.0 as well as Scala 2.11.1 and Akka 2.3.2.
Run Code Online (Sandbox Code Playgroud)

当我使用喷雾的客户,我遇到了一些问题,然后我发现下面的spray.io的文档页面,其中喷雾客户端依赖于阿卡2.10.x:

akka-actor 2.2.x (with ‘provided’ scope, i.e. you need to pull it in yourself)
Run Code Online (Sandbox Code Playgroud)

提供的范围意味着什么?如何将它与scala 2.11.x akka 2.3.x中编写的程序的其他部分一起使用?

编辑

以下是文档页面中列出的最简单的用例:

import akka.actor.ActorSystem
import scala.concurrent.Future
object main {
  def main(args: Array[String]) {
    import spray.http._
    import spray.client.pipelining._
    implicit val system = ActorSystem()
    import system.dispatcher // execution context for futures
    val pipeline: HttpRequest => Future[HttpResponse] = sendReceive
    val response: Future[HttpResponse] = pipeline(Get("http://spray.io/"))
  }
}
Run Code Online (Sandbox Code Playgroud)

使用build.sbt:

scalaVersion := "2.11.1"
libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.3.2"
libraryDependencies += "io.spray" % "spray-client" % "1.3.1"
Run Code Online (Sandbox Code Playgroud)

虽然编译得很好,但它符合运行时错误:

Uncaught error from thread [default-akka.actor.default-dispatcher-2] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[default]
java.lang.NoClassDefFoundError: scala/runtime/AbstractPartialFunction$mcVL$sp
  at ...
Run Code Online (Sandbox Code Playgroud)

Rav*_*ran 5

提供的依赖性意味着,spray需要依赖性,但希望开发人员在其构建配置中提供它.因此,您需要在构建配置中添加akka-actor.

如果您使用的是sbt,则可以将以下行添加到依赖项中.

    "com.typesafe.akka"     %% "akka-actor"         % 2.3.2,
Run Code Online (Sandbox Code Playgroud)

  • 更改`libraryDependencies + ="io.spray"%"spray-client"%"1.3.1"`到`libraryDependencies + ="io.spray"%%"spray-client"%"1.3.1"`.io.spray和spray-client之间的双倍.在当前的sbt中,您正在混合使用Scala 2.11构建的akka​​和使用Scala 2.10构建的喷雾.因此例外. (3认同)