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

Scala:java.lang.VerifyError-参数与函数不兼容-运行时错误,java,scala,ant,mongodb,casbah,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) studentWithDistr

我正在一个混合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)
...
[java]java.lang.VerifyError:(类:scala/collection/immutable/List,方法:ms$1签名:(Lscala/collection/immutable/List;Lscala/Function2;)Lscala/collection/immutable/List;)函数的参数不兼容
[java]位于scala.sys.SystemProperties$.propertyHelp(SystemProperties.scala:57)
[java]位于scala.sys.SystemProperties$.addHelp(SystemProperties.scala:59)
[java]位于scala.sys.SystemProperties$.bool(SystemProperties.scala:63)
[java]位于scala.sys.SystemProperties$.notracesuppression(SystemProperties.scala:75)
[java]位于scala.util.control.NoStackTrace$class.fillInStackTrace(NoStackTrace.scala:21)
[java]位于scala.util.control.BreakControl.fillInStackTrace(Breaks.scala:77)
[java]位于java.lang.Throwable.(Throwable.java:181)
[java]位于scala.util.control.BreakControl.(Breaks.scala:77)
[java]位于scala.util.control.Breaks。(Breaks.scala:30)
[java]位于scala.collection.Traversable$(Traversable.scala:103)
[java]位于scala.collection.Traversable$(Traversable.scala)
[java]位于scala.package$(package.scala:37)
[java]位于scala.package$(package.scala)
[java]位于scala.Predef$(Predef.scala:32)
[java]位于scala.Predef$(Predef.scala)
[java]位于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)


似乎是向下飞入错误链接的根源。

感谢您的回复。。。在我试图追踪这一点的过程中,我现在已经从类路径中删除了所有Scala JAR,除了Scala库、casbah JAR和使casbah运行的最小JAR集(所有JAR都直接从casbah的sbt lib_managed/Scala_2.9.0-1目录中提取)。scala:17指向行
valq=MongoDBObject(“districtlea”->x)
。你知道我应该继续找哪里吗?下一步是放弃ant构建并完全切换到sbt,这无论如何都不是坏事。进一步调查:如果我通过JUnit运行代码,无论是通过ant还是直接运行,代码都可以使用完全相同的类路径。我现在怀疑问题在于我正在使用的Java项目使用自定义类加载器来促进特定Java类的字节码插装。它与Scala没有任何关系,所以我仍然不确定它为什么会导致这个错误,但这是我能确定的唯一区别。我们现在已经解决了这个问题,但当我有时间的时候,我会追踪这个问题,只是为了了解发生了什么。是的,你展示的stacktrace肯定与Casbah无关;我们绝对不会在Casbah使用Break或BreakControl。