2014-01-10 2 views
1

У меня есть две разные копии scala версии 2.9.2 с сайта Scala-Lang.Как узнать, являются ли эти две версии scala одинаковыми?

№ 1 двоичный код: Скала-2.9.2.tgz

№ 2 исходный код: Scala-источники-2.9.2.tgz

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

My use case: Я собираю крошечный файл scala, который я написал (см. Ниже для примера), затем создаю банку, а затем запускаем «main» изнутри этой банки в командной строке. Чтобы сделать эту банку, я должен включить «scala-library.jar» (from this SO answer) в путь к классам. Мне нужно иметь возможность использовать источники scala, которые я создаю, чтобы впоследствии модифицировать исходный код.

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

Точное сообщение об ошибке (при использовании Scala, что я строю из источника):

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

Пример кода, который я бегу для десериализации файла:

object test { 
    def main(args: Array[String]) { 
     var infile = args(0) 
     val thing1 : MyClass = withObjectInput(infile) { 
      f => f.readObject().asInstanceOf[MyClass] 
     } 
    }  
} 

ответ

3

Если MyClass Безразлично» t явно подает serialVersionUID, компилятор его генерирует. Это будет отличаться для разных версий javac, используемых при компиляции.

Таким образом, эта ошибка будет вызвана несоответствием между версией javac, которую вы использовали для компиляции scala-библиотеки, и версией, используемой для загруженного двоичного файла.

+0

Есть ли способ узнать, какая версия javac была использована при компиляции бинарного файла? – Hal

+0

Это неправильный путь. Если вы сериализуете, вы должны аннотировать свой класс с помощью '@SerialVersionUID (значение)' –

+0

. Проблема serialVersionUID исходит из scala-библиотеки в WrappedArray (см. Сообщение об ошибке в исходном сообщении). – Hal