2015-05-07 2 views
1

У меня есть игра с сохранением сериализации с помощью java.io. Экономия составляет Hashmap[String, Any]. Классы, содержащиеся в Any, имеют SerialVersionUID (1L). Я использую sbt с этой конфигурацией https://github.com/ajhager/libgdx-sbt-project.g8.Как я могу указать SerialVersionUID для scala.collection.mutable.Hashmap?

Когда я запускаю проект с desktop/run он работает просто отлично, но баночка производства assembly выдает эту ошибку:

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) 

Я, вероятно, следует сохранить как массив кортежей вместо этого, но я не могу понять что вызывает эту ошибку или как я могу это исправить.

+0

я теперь использовать массив кортежей и имеют те же проблемы с UID класса tuple2. – Joonazan

ответ

0

Я до сих пор не знаю, как установить SerialVersionUID Scala Suples, или почему у Scala Hashmap был UID 1, в отличие от кортежа.

Однако мне удалось получить assembly для получения приемлемого выхода, сообщив ProGuard, чтобы он не запутывался любой Serializable. Просто Tuple2s и мои собственные классы Serializable хватило бы, но я не хотел узнать все о синтаксисе ProGuard -keep.

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

Смежные вопросы