2014-01-10 41 views
1

我有两个不同的Scala版本2.9.2的Scala-Lang网站。我怎么知道这两个版本的scala是否完全一样?

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

2号是源代码:阶来源-2.9.2.tgz

我建立阶从源代码。我曾尝试在应用程序和二进制工作中使用这两种工具,但编译后的源代码没有。我正在编译一个我编写的小型scala文件(参见下面的示例),然后创建一个jar,然后在命令行上从该jar中运行“main”。为了制作这个jar,我必须在类路径中包含“scala-library.jar”(from this SO answer)。我需要能够使用我构建的scala源,以便稍后修改源代码。

当我使用已编译的源代码时,出现serialVersionUID错误,而二进制代码不会导致此问题。

确切的错误消息(使用我从源代码编译阶时):

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] 
     } 
    }  
} 

回答

3

如果MyClass没有按” t明确提供了一个serialVersionUID,编译器生成一个。编译时使用的不同版本的javac会有所不同。

所以这个错误是由用于编译scala-library的javac版本与用于下载的二进制文件的版本之间的不匹配造成的。

+0

有什么方法可以在编译二进制文件时找出使用哪个版本的javac? – Hal

+0

这是错误的做法。如果你正在序列化,那么你应该使用'@SerialVersionUID(value)'注解你的类。' –

+0

serialVersionUID问题来自WrappedArray中的scala-library(请参阅原始帖子中的错误消息)。 – Hal

相关问题