как исправить ошибку в scala-library.jar

Я строю Play! Приложение Framework с использованием Play! 2.2.1, sbt 0.13.0, а моя локальная версия scala — 2.10.3.

Я столкнулся с проблемой serialVersionUID при десериализации определенного файла, который я унаследовал от коллег для работы над этим проектом (я понятия не имею, кто (или когда) создал этот сериализованный файл).

Мое сообщение об ошибке при сборке в Play!:

Caused by: java.io.InvalidClassException: scala.collection.mutable.WrappedArray$ofRef; local class incompatible: stream classdesc serialVersionUID = 8184381945838716286, local class serialVersionUID = -8707880168089396949

После долгих поисков я нашел этот патч, который должен исправить ошибку SI-5046:

https://issues.scala-lang.org/browse/SI-5046

Я скачал исходный код scala с github для ветки 2.10.x и применил патч к WrappedArray.scala здесь: scala/src/library/scala/collection/mutable/WrappedArray.scala.

Что мне делать с этим измененным исходным кодом, чтобы я мог использовать его в своем Play! заявление?

* РЕДАКТИРОВАТЬ №1:

Я прошел по ссылкам от @Alexey Romanov

Я все еще получаю сообщение об ошибке WrappedArray$ofRef при компиляции Play, хотя теперь это другое сообщение об ошибке. Вот что я сделал:

Я перестроил дистрибутив scala с помощью ant, используя:

ant build

ant partialdist

Тогда в игре! Я указал версию scala для использования с SBT и плагинами, добавив в свой файл Build.scala следующее:

scalaVersion := "2.10.3" autoScalaLibrary := false scalaHome := Some(file("/path_to_my_rebuilt_scala_distribution"))

Теперь мое сообщение об ошибке:

Caused by: java.io.InvalidClassException: scala.collection.mutable.WrappedArray$ofRef; incompatible types for field bitmap$0

РЕДАКТИРОВАТЬ № 2:

Я перемещаюсь по версиям Scala, и когда я добрался до 2.9.2, ошибка WrappedArray$ofRef была исправлена ​​путем применения патча. Теперь я получаю еще одну ошибку сериализации для другого класса:

java.io.InvalidClassException: scala.Symbol; local class incompatible: stream classdesc serialVersionUID = -3681772905693662441, local class serialVersionUID = 7747205442425187939

Я перейду к Scala 2.9.1 и посмотрю, смогу ли я добраться до содержимого файла с этой версией.

* РЕДАКТИРОВАТЬ №3:

В scala версии 2.9.1-1 я получаю другую ошибку сериализации: java.io.InvalidClassException: scala.Tuple2; local class incompatible: stream classdesc serialVersionUID = 3990034604647285925, local class serialVersionUID = 5867822941721784448

Понятия не имею, что попробовать дальше... продолжайте спускаться по версиям scala или есть другие предложения?


person Hal    schedule 06.01.2014    source источник
comment
Вы пытались запустить ant для сборки двоичных файлов scala? (docs.scala-lang.org/scala)   -  person Miichi    schedule 07.01.2014
comment
Я восстанавливаю с помощью муравья прямо сейчас. Как заставить игру распознавать эту новую сборку?   -  person Hal    schedule 07.01.2014


Ответы (1)


Чтобы использовать локальную установку Scala для создания проекта определить scalaHome:

scalaHome := Some(file("/path/to/scala/home/"))

Также см. ">Как я могу изменить версию Scala, используемую Play, SBT и его плагинами? если вам в конечном итоге придется также пересобирать Play.

РЕДАКТИРОВАТЬ: я действительно посмотрел описание ошибки. Похоже, что патч позволит сериализовать/десериализовать WrappedArray, созданный двумя разными версиями Scala, обе из которых включают этот патч. С

(Я понятия не имею, кто создал этот сериализованный файл (или когда))

это, вероятно, не будет работать для вас. И, судя по новому сообщению об ошибке, возможно, версия Scala, с которой он был сериализован, просто не включала поля 2.10.3, и десериализовать невозможно. Мое лучшее предложение — попробовать десериализацию с разными версиями Scala (вероятно, не 2.10.*, так как они бинарно совместимы) и посмотреть, какая из них работает.

person Alexey Romanov    schedule 07.01.2014
comment
Сейчас я пытаюсь скомпилировать Scala 2.9.2. Проблема с ошибкой сериализации WrappedArra$ofRef исчезла, но появилась новая ошибка сериализации в scala.Symbol. Я отредактирую свой вопрос выше. - person Hal; 10.01.2014