1

我有来自 Scala-Lang 网站的 scala 版本 2.9.2 的两个不同副本。

1号是二进制代码:scala-2.9.2.tgz

2号是源代码:scala-sources-2.9.2.tgz

我从源代码构建了 scala。我尝试在应用程序和二进制文件中同时使用,但编译的源代码没有。

我的用例:我正在编译我编写的一个小 scala 文件(参见下面的示例),然后创建一个 jar,然后在命令行上从该 jar 中运行“main”。要制作那个 jar,我必须在类路径中包含“scala-library.jar”(来自this SO answer)。我需要能够使用我构建的 scala-sources,以便以后可以修改源代码。

当我使用编译后的源代码时,我收到关于 serialVersionUID 的错误,而二进制代码不会导致此问题。

确切的错误消息(使用我从源代码构建的 scala 时):

java.io.InvalidClassException: scala.collection.mutable.WrappedArray$ofRef; local class incompatible: stream classdesc serialVersionUID = 8184381945838716286, local class serialVersionUID = 6238838760334617323

我为反序列化文件而运行的示例代码:

object test {
    def main(args: Array[String]) {
        var infile = args(0)
        val thing1 : MyClass = withObjectInput(infile) { 
          f => f.readObject().asInstanceOf[MyClass] 
        }
    }    
}
4

1 回答 1

3

如果MyClass没有明确提供 a serialVersionUID,编译器会生成一个。这对于编译时使用的不同版本的 javac 会有所不同。

因此,此错误将由您用于编译 scala-library 的 javac 版本与用于下载的二进制文件的版本不匹配引起。

于 2014-01-10T22:43:58.213 回答