我在混合的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中与相同的类路径。我很欣赏任何关于在哪里进一步挖掘的想法。
答案 0 :(得分:2)
看起来您的第三方图书馆与旧版本的Scala相关联:
[java] at com.enspire.hive.elements.pub.SelectionJson $$ anonfun $ 1.apply(SelectionJson.scala:17)
似乎是错误链接的根源。