【问题标题】:java.lang.VerifyError Incompatible argument to functionjava.lang.VerifyError 函数参数不兼容
【发布时间】:2013-08-09 16:12:09
【问题描述】:

对于我编写的 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)

如 cmets 所示,这可能是 classpath 问题,但我不知道如何调试。巧合与否,这发生在我从 Mac OS X Java 6 升级到 Java 7 之后,我在两台机器上都安装了 Java 7。任何见解将不胜感激。

如果这可能有帮助,这里是来自 sbt consoleclasspath 转储,编译和运行时相同

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

如果有人想尝试使用 Java 7 进行全新编译,然后使用 sbt run,请随时从 repo 获取它。

【问题讨论】:

  • 是的。这是一个堆栈跟踪好吧。不确定您希望任何人在没有相关源代码的情况下做什么...
  • 很公平,我包括了我认为这是我的来源的相关部分,但我不确定。如果您查看堆栈跟踪,它并没有引用我的任何代码。挖掘表明它可能是编译库与运行时库之间的冲突stackoverflow.com/questions/100107/…
  • 粗略研究表明,VerifyError 表明您的类路径存在问题,而不是代码存在问题。当你在不同的计算机上运行时,是否可能涉及不同的 jar?
  • @ChristopherMartin 是的,我同意这可能是类路径问题,但我不知道如何调试
  • 我提出的问题是调试的第一步。你的 jars 来自哪里:你用什么来构建,你用什么来部署?

标签: scala sbt akka spray


【解决方案1】:

很遗憾,1.2-M8 与 Akka 2.2.0 final 不兼容。使用 Akka 2.2.0-RC1 或升级到最新的夜间构建的 spray 1.2。

更新:另外,现在最终版本已经发布,因此您可以使用 1.2.0 版本和最新的 Akka 2.2.3。

【讨论】:

  • TYVM!这并不明显,它也解释了为什么它可以在我的另一台计算机上运行,​​因为我在那里使用 Akka 2.2.0-RC2。
  • 这个答案是救命稻草。我正在学习中,很困惑。
  • 我们已经改进了这方面的文档,但是新版本还没有上线:(
猜你喜欢
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 2016-10-15
相关资源
最近更新 更多