声明变量时出现 NoSuchMethodError

NoSuchMethodError when declaring a variable

我 运行 在使用 Spark 和 Scala 时遇到了一个奇怪的错误。我有一段代码声明了一个变量:

var offset = 0

这会导致以下异常:

java.lang.NoSuchMethodError: scala.runtime.IntRef.create(I)Lscala/runtime/IntRef;
   at my.package.MyClass$class.myMethod(MyClass.scala:5)
   ...

而且直接指向变量声明。我正在使用 Scala 2.11.2。编译作品。这是一个运行时错误。当 运行 sbt package 时,我也没有收到任何 dependency/version 不匹配警告。

这几乎可以肯定是 Scala 版本不匹配。 比较v2.10和v2.11中IntRef的定义,可以看到create只是在后者的版本中引入的(见https://github.com/scala/scala/blob/v2.10.4/src/library/scala/runtime/IntRef.java and https://github.com/scala/scala/blob/v2.11.0/src/library/scala/runtime/IntRef.java)。 您可以打赌,您的某些依赖项是针对 < 2.11.0 的 scala 版本编译的。 你可能想尝试 sbt-dependency-graph (https://github.com/jrudolph/sbt-dependency-graph) 来检查你的传递依赖。