如何为 scala.collection.mutable.Hashmap 指定 SerialVersionUID?
How can I specify a SerialVersionUID for a scala.collection.mutable.Hashmap?
我有一款游戏的存档序列化为 java.io。扑救是 Hashmap[String, Any]
。 Any
中包含的类都有SerialVersionUID(1L)。我将 sbt 与此配置一起使用 https://github.com/ajhager/libgdx-sbt-project.g8.
当我使用 desktop/run
启动项目时它工作正常,但是 assembly
生成的 jar 抛出此错误:
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.io.InvalidClassException: scala.collection.mutable.HashMap; local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = -1796852918056492754
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.run(LwjglApplication.java:120)
Caused by: java.io.InvalidClassException: scala.collection.mutable.HashMap; local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = -1796852918056492754
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:617)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1622)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at ntn.castersrun.IntoFileSaver$.getSave(IntoFileSaver.scala:34)
at ntn.castersrun.IntoFileSaver$.load(IntoFileSaver.scala:24)
我可能应该另存为元组数组,但我不知道是什么原因导致了这个错误,也不知道如何解决它。
我仍然不知道如何设置 Scala 元组的 SerialVersionUID,或者为什么 Scala Hashmap 的 UID 为 1,与元组不同。
不过,我通过告诉 ProGuard 不要混淆 any Serializable,设法让 assembly
产生可接受的输出。仅 Tuple2s 和我自己的 Serializable 类 就足够了,但我不想了解 ProGuard -keep
语法的所有内容。
http://proguard.sourceforge.net/manual/examples.html#serializable
我有一款游戏的存档序列化为 java.io。扑救是 Hashmap[String, Any]
。 Any
中包含的类都有SerialVersionUID(1L)。我将 sbt 与此配置一起使用 https://github.com/ajhager/libgdx-sbt-project.g8.
当我使用 desktop/run
启动项目时它工作正常,但是 assembly
生成的 jar 抛出此错误:
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.io.InvalidClassException: scala.collection.mutable.HashMap; local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = -1796852918056492754
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.run(LwjglApplication.java:120)
Caused by: java.io.InvalidClassException: scala.collection.mutable.HashMap; local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = -1796852918056492754
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:617)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1622)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at ntn.castersrun.IntoFileSaver$.getSave(IntoFileSaver.scala:34)
at ntn.castersrun.IntoFileSaver$.load(IntoFileSaver.scala:24)
我可能应该另存为元组数组,但我不知道是什么原因导致了这个错误,也不知道如何解决它。
我仍然不知道如何设置 Scala 元组的 SerialVersionUID,或者为什么 Scala Hashmap 的 UID 为 1,与元组不同。
不过,我通过告诉 ProGuard 不要混淆 any Serializable,设法让 assembly
产生可接受的输出。仅 Tuple2s 和我自己的 Serializable 类 就足够了,但我不想了解 ProGuard -keep
语法的所有内容。
http://proguard.sourceforge.net/manual/examples.html#serializable