java - Scala:java.lang.VerifyError - 函数参数不兼容 - 运行时错误

标签 java scala ant mongodb casbah

我在混合 Java/Scala 项目上使用 Scala 的 MongoDB Casbah 库。

此代码在 REPL 中运行良好:

studentCollection.distinct("districtlea").foreach(x => {
 println(x)
 val q = MongoDBObject("districtlea" -> x)
 val studentWithDistrict = studentCollection.findOne(q)
 studentWithDistrict match {
   case Some(s) => println(s.getAs[String]("districtname").getOrElse("NO DISTRICT NAME FOUND FOR LEA " + x))
   case None => println("NO DISTRICT FOUND WITH LEA ")
}
})

当我通过 Ant 构建运行它时(与我在 REPL 中使用的类路径相同),它编译得很好,但我在运行时得到了这个:

 [java] java.lang.VerifyError: (class: scala/collection/immutable/List, method: ms$1 signature: (Lscala/collection/immutable/List;Lscala/Function2;)Lscala/collection/immutable/List;) Incompatible argument to function
 [java]     at scala.sys.SystemProperties$.propertyHelp(SystemProperties.scala:57)
 [java]     at scala.sys.SystemProperties$.addHelp(SystemProperties.scala:59)
 [java]     at scala.sys.SystemProperties$.bool(SystemProperties.scala:63)
 [java]     at scala.sys.SystemProperties$.noTraceSupression(SystemProperties.scala:75)
 [java]     at scala.util.control.NoStackTrace$class.fillInStackTrace(NoStackTrace.scala:21)
 [java]     at scala.util.control.BreakControl.fillInStackTrace(Breaks.scala:77)
 [java]     at java.lang.Throwable.<init>(Throwable.java:181)
 [java]     at scala.util.control.BreakControl.<init>(Breaks.scala:77)
 [java]     at scala.util.control.Breaks.<init>(Breaks.scala:30)
 [java]     at scala.collection.Traversable$.<init>(Traversable.scala:103)
 [java]     at scala.collection.Traversable$.<clinit>(Traversable.scala)
 [java]     at scala.package$.<init>(package.scala:37)
 [java]     at scala.package$.<clinit>(package.scala)
 [java]     at scala.Predef$.<init>(Predef.scala:32)
 [java]     at scala.Predef$.<clinit>(Predef.scala)
 [java]     at com.enspire.hive.elements.pub.SelectionJson$$anonfun$1.apply(SelectionJson.scala:17)
...

该堆栈跟踪的最后一行指向“val q = ...”行。

我使用 Scala 2.9.0-1 构建了 Casbah 库 [2.9.0-1-2.2.0-SNAPSHOT],并使用相同的库来运行它。我怀疑这个错误与使用不兼容版本的 Scala 构建的类路径上的某些库有关,但我在任何地方都找不到它,而且我无法解释为什么相同的代码可以在 REPL 中使用相同的类路径。如果有任何有关进一步挖掘的想法,我将不胜感激。

最佳答案

看起来您的第三方库之一链接到了旧版本的 Scala:

[java] 位于 com.enspire.hive.elements.pub.SelectionJson$$anonfun$1.apply(SelectionJson.scala:17)

似乎是进入错误链接的根源。

关于java - Scala:java.lang.VerifyError - 函数参数不兼容 - 运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6615511/

相关文章:

java - 命名 Ant 目标的最佳做法是什么?

java - 将 json 响应转换为 null 或 void 对象

java - 使用Spring的@Configuration类的缺点

Scala:Mock init 因 Cats IO 类型参数而失败

scala - 为什么 Scala 特征不允许构造函数参数?

android - 无法创建任务或键入 checkenv 原因名称未定义

java - 获取 Ant 元素中保存的值

java - 我应该在哪里找到要由 java.util.ResourceBundle 加载的资源?

java - 我如何在没有 firebase、socket.io、pubnub 的情况下创建聊天应用程序?

scala - 如何真实测试akka流?