如何为 scala.collection.mutable.Hashmap 指定 SerialVersionUID?

How can I specify a SerialVersionUID for a scala.collection.mutable.Hashmap?

我有一款游戏的存档序列化为 java.io。扑救是 Hashmap[String, Any]Any中包含的类都有Seri​​alVersionUID(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