我正在构建一个游戏!使用 Play 的框架应用程序!2.2.1,sbt 0.13.0,而我本地的 scala 版本是 2.10.3。
在反序列化我从同事那里继承的用于该项目的特定文件时,我遇到了 serialVersionUID 问题(我不知道是谁创建了这个序列化文件(或何时))。
在 Play! 中构建时我的错误消息:
Caused by: java.io.InvalidClassException: scala.collection.mutable.WrappedArray$ofRef; local class incompatible: stream classdesc serialVersionUID = 8184381945838716286, local class serialVersionUID = -8707880168089396949
经过大量搜索,我找到了应该修复错误 SI-5046 的补丁:
https://issues.scala-lang.org/browse/SI-5046
我从 github 下载了分支 2.10.x 的 scala 源代码,并在此处将补丁应用于 WrappedArray.scala:scala/src/library/scala/collection/mutable/WrappedArray.scala
我该如何处理这个修改后的源代码,以便我可以在我的 Play 中使用它!应用?
*编辑#1:
我关注了@Alexey Romanov 的链接
编译 Play 时,我仍然收到有关 WrappedArray$ofRef 的错误消息,但现在它是不同的错误消息。这是我所做的:
我使用 ant 重建了 scala 发行版,使用:
ant build
ant partialdist
然后在玩!通过将以下内容添加到我的 Build.scala 文件中,我指定了用于 SBT 和插件的 scala 版本:
scalaVersion := "2.10.3"
autoScalaLibrary := false
scalaHome := Some(file("/path_to_my_rebuilt_scala_distribution"))
现在我的错误信息是:
Caused by: java.io.InvalidClassException: scala.collection.mutable.WrappedArray$ofRef; incompatible types for field bitmap$0
编辑#2:
我正在向下移动 Scala 版本,当我到达 2.9.2 时,通过应用补丁修复了有关 WrappedArray$ofRef 的错误。现在我收到另一个类的另一个序列化错误:
java.io.InvalidClassException: scala.Symbol; local class incompatible: stream classdesc serialVersionUID = -3681772905693662441, local class serialVersionUID = 7747205442425187939
我将向下移动到 Scala 2.9.1,看看是否可以使用该版本访问文件的内容。
*编辑#3:
在 scala 版本 2.9.1-1 中,我得到一个不同的序列化错误:
java.io.InvalidClassException: scala.Tuple2; local class incompatible: stream classdesc serialVersionUID = 3990034604647285925, local class serialVersionUID = 5867822941721784448
不知道接下来要尝试什么.. 继续降低 scala 版本,还是有其他建议?