【发布时间】:2014-01-24 07:20:25
【问题描述】:
我正在构建一个 Play!使用 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 版本,还是有其他建议?
【问题讨论】:
-
您是否尝试过运行
ant来构建scala 二进制文件? (docs.scala-lang.org/scala) -
我现在正在用 ant 重建。我如何通过游戏来识别这个新版本?
标签: scala playframework-2.2 serialversionuid