【问题标题】:how can spray.io work with scala 2.11.1 akka 2.3.2spray.io 如何与 scala 2.11.1 akka 2.3.2 一起工作
【发布时间】:2014-11-02 19:39:56
【问题描述】:

我想将 spray.io 与 scala 2.11.x akka 2.3.x 一起使用,我在 spray.io 的项目信息页面中找到以下内容:

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.

当我使用spray-client时,我遇到了一些问题,然后我在spray.io的文档页面中发现spray-client依赖于akka 2.10.x:

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

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

编辑

以下是documentation page中列出的最简单的用例:

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/"))
  }
}

使用 build.sbt:

scalaVersion := "2.11.1"
libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.3.2"
libraryDependencies += "io.spray" % "spray-client" % "1.3.1"

虽然这编译得很好,但它遇到了运行时错误:

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 ...

【问题讨论】:

    标签: scala spray spray-client


    【解决方案1】:

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

    如果你使用的是 sbt,你可以在你的依赖中添加下面一行。

        "com.typesafe.akka"     %% "akka-actor"         % 2.3.2,
    

    【讨论】:

    • 不,它不起作用,我通过添加 build.sbt 和一个独立的示例重新编辑了我的问题。它编译得很好,但会导致运行时错误。
    • 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 构建的 spray。因此例外。
    • 谢谢,它有效。但是为什么它是用 scala 2.10 构建的,因为我已经弄清楚了 scalaVersion := "2.11.1"?
    • 当你放一个 %% 时,你是在要求 sbt 找到一个与你指定的使用相同的 Scala 版本构建的版本。当您输入一个 % 时,它会选择默认版本的 spray-client。喷子团队决定默认版本应该是 2.10。阅读stackoverflow.com/questions/17461453/…
    猜你喜欢
    • 2011-10-25
    • 2015-05-19
    • 2019-02-19
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多