2014-01-06 6 views
4

Play! Play를 사용하는 프레임 워크 응용 프로그램! 2.2.1, sbt 0.13.0이고 스칼라의 로컬 버전은 2.10.3입니다.어떻게 scala-library.jar의 버그를 수정합니까?

동료가이 프로젝트에서 작업 할 때 상속 한 특정 파일을 비 직렬화 할 때 serialVersionUID 문제가 발생했습니다.이 일련화된 파일을 만든 사람은 누구인지 알지 못합니다.

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

: 내 오류 메시지가 많은 검색 후 재생! :

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

에 구축 할 때, 나는 버그 SI-5046를 해결하도록되어이 패치를 발견

2.10.x 용 github에서 scala 소스 코드를 다운로드하고 여기에 WrappedArray.scala에 패치를 적용했습니다. scala/src/library/scala/collection/mutable/WrappedArray.scala

수정 된 소스 코드로 플레이에서 사용할 수 있도록해야합니까? 신청?

* 수정 # 1 : 지금은 다른 비록

은 내가 플레이를 컴파일 할 때

나는 여전히 WrappedArray $ ofRef에 대한 오류 메시지를 받고 있어요 @Alexey 로마노프에서 링크를 따라 에러 메시지. 다음은 내가 무슨 짓을했는지 :

ant build

ant partialdist

을 다음 플레이에 :

나는 사용하여 개미를 사용하여 스칼라 분포를 재건!

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

나는 내 Build.scala 파일에 다음을 추가하여 SBT 및 플러그인에 사용할 스칼라 버전을 지정 편집 # 2 :

저는 스칼라 버전을 내려 가고 있습니다. 2.9.2로 내려 갔을 때, WrappedArray $ ofRef에 대한 오류는 패치를 적용하여 수정되었습니다. 지금은 다른 클래스의 또 다른 직렬화 오류가 점점 오전 : 나는 스칼라 2.9.1 아래로 이동하고 내가 그 버전으로 파일의 내용을 얻을 수 있는지 확인합니다

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

.

* 수정 # 3 : java.io.InvalidClassException: scala.Tuple2; local class incompatible: stream classdesc serialVersionUID = 3990034604647285925, local class serialVersionUID = 5867822941721784448

아니 생각 아래 계속 ... 다음 시도하는 무엇을 : 스칼라 버전 2.9.1-1에서

, 나는 다른 직렬화 오류 스칼라 버전 또는 다른 제안 사항이 있습니까?

+1

'ant'를 실행하여 스칼라 바이너리를 빌드 해 보았습니까? (http://docs.scala-lang.org/scala/) – Miichi

+0

지금 개미로 재건 중입니다. 이 새로운 빌드를 인식하려면 어떻게해야합니까? – Hal

답변

1

To use a local Scala installation for building a project scalaHome을 정의 : 당신은뿐만 아니라 재생을 다시 할 필요가 끝날 경우

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

는 또한 How can I change version of Scala that is used by Play, SBT and its plugins?를 참조하십시오.

편집 : 실제로 버그 설명을 보았습니다. 패치가 서로 다른 두 가지 스칼라 버전 에 의해 생성 된 WrappedArray의 직렬화/역 직렬화를 허용하는 것으로 보입니다.이 패치에는 모두이 포함되어 있습니다.

부터

(I have no idea who created this serialized file (or when))

이후로는 효과가 없을 것입니다. 그리고 새로운 에러 메시지에서 판단 해 보면, 직렬화 된 버전의 스칼라에는 2.10.3 필드가 포함되지 않았고 비 직렬화가 불가능할 수도 있습니다. 가장 좋은 제안은 서로 다른 스칼라 버전을 사용하여 비 직렬화를 시도하는 것입니다 (아마도 2.10. *가 아닌 이진 호환이므로).

+0

감사합니다. @Alexey Romanov 내 질문에 편집 참조하십시오. – Hal

+1

@ user3161799 내 편집을 참조하십시오. –

+0

이제 스칼라 2.9.2로 컴파일하려고합니다. WrappedArra $ ofRef 직렬화 오류의 문제점은 사라졌지만 scala.Symbol에 새로운 직렬화 오류가 있습니다. 위의 질문을 수정하겠습니다. – Hal