使用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
时,我没有收到任何依赖/版本不匹配警告。
答案 0 :(得分:12)
这几乎可以肯定是scala版本不匹配。
比较v2.10和v2.11中IntRef的定义,您可以看到create
仅在后一版本中引入(请参阅https://github.com/scala/scala/blob/v2.10.4/src/library/scala/runtime/IntRef.java和https://github.com/scala/scala/blob/v2.11.0/src/library/scala/runtime/IntRef.java)。
你可以打赌,你的一些依赖项是根据scala版本编译的。 2.11.0。
您可能想尝试使用sbt-dependency-graph(https://github.com/jrudolph/sbt-dependency-graph)来检查传递依赖性。