对于我编写的Spray示例应用程序,sbt run
我收到一个奇怪的错误,它编译得很好,我只在我的个人计算机上得到错误,因为它在另一台计算机上运行正常。
以下是我认为的相关来源,它是来自Spray sample code的模板代码,但我不认为这是原因。
package spray.examples
import akka.actor.{ActorSystem, Props}
import akka.io.IO
import spray.can.Http
object Boot extends App {
implicit val system = ActorSystem()
// the handler actor replies to incoming HttpRequests
val handler = system.actorOf(Props[DemoServiceActor], name = "handler")
IO(Http) ! Http.Bind(handler, interface = "localhost", port = 8080)
}
这是堆栈跟踪
Uncaught error from thread [default-akka.actor.default-dispatcher-3] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[default]
java.lang.VerifyError: (class: spray/can/server/HttpListener, method: <init> signature: (Lakka/actor/ActorRef;Lspray/can/Http$Bind;Lspray/can/HttpExt$Settings;)V) Incompatible argument to function
at spray.can.HttpManager$$anonfun$receive$1$$anonfun$applyOrElse$1.apply(HttpManager.scala:65)
at spray.can.HttpManager$$anonfun$receive$1$$anonfun$applyOrElse$1.apply(HttpManager.scala:65)
at akka.actor.CreatorFunctionConsumer.produce(Props.scala:369)
at akka.actor.Props.newActor(Props.scala:323)
at akka.actor.ActorCell.newActor(ActorCell.scala:534)
at akka.actor.ActorCell.create(ActorCell.scala:560)
at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:425)
at akka.actor.ActorCell.systemInvoke(ActorCell.scala:447)
at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:262)
at akka.dispatch.Mailbox.run(Mailbox.scala:218)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
如评论中所示,这可能是classpath
问题,但我不知道如何调试。巧合与否,这种情况发生在我从Mac OS X Java 6升级到Java 7之后,我在两台机器上都安装了Java 7。任何见解都将非常感激。
如果这可能有帮助,这里是来自classpath
的{{1}}转储,对于编译和运行时来说是相同的
sbt console
如果有人愿意尝试使用Java 7然后List(Attributed(/Users/bob/projects/spray-file-upload/target/scala-2.10/classes),
Attributed(/Users/bob/.sbt/0.12.4/boot/scala-2.10.2/lib/scala-library.jar),
Attributed(/Users/bob/.ivy2/cache/com.typesafe.akka/akka-actor_2.10/jars/akka-actor_2.10-
2.2.0.jar), Attributed(/Users/bob/.ivy2/cache/com.typesafe/config/bundles/config-1.0.2.jar),
Attributed(/Users/bob/.ivy2/cache/io.spray/spray-json_2.10/jars/spray-json_2.10-1.2.5.jar),
Attributed(/Users/bob/.ivy2/cache/org.parboiled/parboiled-scala_2.10/bundles/parboiled-
scala_2.10-1.1.5.jar), Attributed(/Users/bob/.ivy2/cache/org.parboiled/parboiled-
core/bundles/parboiled-core-1.1.5.jar), Attributed(/Users/bob/.ivy2/cache/io.spray/spray-
can/jars/spray-can-1.2-M8.jar), Attributed(/Users/bob/.ivy2/cache/io.spray/spray-
io/jars/spray-io-1.2-M8.jar), Attributed(/Users/bob/.ivy2/cache/io.spray/spray-
util/jars/spray-util-1.2-M8.jar), Attributed(/Users/bob/.ivy2/cache/io.spray/spray-
http/jars/spray-http-1.2-M8.jar), Attributed(/Users/bob/.ivy2/cache/io.spray/spray-
httpx/jars/spray-httpx-1.2-M8.jar),
Attributed(/Users/bob/.ivy2/cache/org.jvnet.mimepull/mimepull/jars/mimepull-1.9.2.jar),
Attributed(/Users/bob/.ivy2/cache/io.spray/spray-routing/jars/spray-routing-1.2-M8.jar),
Attributed(/Users/bob/.ivy2/cache/com.chuusai/shapeless_2.10/jars/shapeless_2.10-1.2.4.jar))
进行全新编译,请随意从repo抓取它。
答案 0 :(得分:11)
不幸的是,1.2-M8与Akka 2.2.0 final不兼容。要么使用Akka 2.2.0-RC1,要么升级到最近的夜间喷雾1.2。
更新:此外,到目前为止,最终版本已经发布,因此您可以将1.2.0版本与最新的Akka 2.2.3一起使用。