如何为scala.collection.mutable.hashmap指定串行versionuid



我有一个与java.io序列化的游戏。保存是Hashmap[String, Any]Any s中包含的类都具有串行ververionuid(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$1.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元组的串行verververionuid,或者为什么Scala Hashmap具有UID 1,与元组不同。

但是,我通过告诉Proguard不要混淆任何序列化来使assembly产生可接受的输出。只是tuple2s和我自己的序列化课程就足够了,但是我不想了解proguard -keep语法。

http://proguard.sourceforge.net/manual/examples.html#serializable

最新更新