У меня есть две разные копии 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]
}
}
}
Есть ли способ узнать, какая версия javac была использована при компиляции бинарного файла? – Hal
Это неправильный путь. Если вы сериализуете, вы должны аннотировать свой класс с помощью '@SerialVersionUID (значение)' –
. Проблема serialVersionUID исходит из scala-библиотеки в WrappedArray (см. Сообщение об ошибке в исходном сообщении). – Hal