Получение MissingRequirementError после перемещения классов в другой пакет
Поэтому я пытался организовать свои пакеты немного лучше, и после перемещения некоторых классов в другой пакет мой код теперь дает мне следующее исключение:
Exception in thread "main" scala.reflect.internal.MissingRequirementError: class Track not found.
at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:16)
at scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:17)
at scala.reflect.internal.Mirrors$RootsBase.ensureClassSymbol(Mirrors.scala:90)
at scala.reflect.internal.Mirrors$RootsBase.staticClass(Mirrors.scala:119)
at scala.reflect.internal.Mirrors$RootsBase.staticClass(Mirrors.scala:21)
at scala.pickling.internal.package$.typeFromString(package.scala:61)
at scala.pickling.internal.package$$anonfun$2.apply(package.scala:63)
at scala.pickling.internal.package$$anonfun$2.apply(package.scala:63)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.immutable.List.foreach(List.scala:318)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.AbstractTraversable.map(Traversable.scala:105)
at scala.pickling.internal.package$.typeFromString(package.scala:63)
at scala.pickling.FastTypeTag$.apply(FastTags.scala:57)
at scala.pickling.json.JSONPickleReader$$anonfun$beginEntry$2.apply(JSONPickleFormat.scala:204)
at scala.pickling.json.JSONPickleReader$$anonfun$beginEntry$2.apply(JSONPickleFormat.scala:193)
at scala.pickling.PickleTools$class.withHints(Tools.scala:425)
at scala.pickling.json.JSONPickleReader.withHints(JSONPickleFormat.scala:159)
at scala.pickling.json.JSONPickleReader.beginEntry(JSONPickleFormat.scala:193)
at scala.pickling.json.JSONPickleReader.beginEntryNoTag(JSONPickleFormat.scala:192)
at BillboardsHot100.deserializeTrackList(Billboards.scala:60)
at BillboardsHot100.checkForChanges(Billboards.scala:31)
at Main$.main(Main.scala:7)
at Main.main(Main.scala)
Если я оставляю все в одном пакете или объявляю эти классы в одном и том же файле, он работает нормально.
Может кто-нибудь просветить меня, как это исправить?
РЕШЕНО: В случае, если эта проблема тоже, проблема была в том, как Pickling сериализуется. В json есть поле 'tpe' для типа, и оно изменилось с
"tpe": "Track"
в
"tpe": "com.new.package.path.Track"
который был новым пакетом (не совсем мое название пакета). Надеюсь, что этот пример может помочь кому-то еще в будущем.
1 ответ
Может быть, вы пытаетесь прочитать некоторые старые данные, которые выбиты под старым именем класса. Очевидно, это не сработает.
Я думаю, вам нужно временно сериализовать его каким-то альтернативным способом, чтобы обойти эту проблему.