なぜこのエラーが発生するのですか?
Serialization Problem
java.io.InvalidClassException: scala.reflect.ClassTypeManifest;
local class incompatible: stream classdesc serialVersionUID =
intellijを使用する
なぜこのエラーが発生するのですか?
Serialization Problem
java.io.InvalidClassException: scala.reflect.ClassTypeManifest;
local class incompatible: stream classdesc serialVersionUID =
intellijを使用する
推測させてください:あなたは(Javaの組み込みシリアル化を介して)(サブタイプである)を含むクラスをClassManifest
ファイルClassTypeManifest
(またはデータベース)にシリアル化し、次にscalaバージョンをアップグレードし、そのファイルを逆シリアル化しようとしています。 ?または、シリアル化されたオブジェクトをあるJVMプロセスから別のプロセスに送信していて、それらが異なるバージョンのscalaを実行している場合。
まあ、それをしないでください。最初の理由は、明示的なフィールドをClassTypeManifest
宣言しないことです( serialVersionUIDとは何ですか、なぜそれを使用する必要があるのですか?)。これは、クラスを変更するとシリアル化形式が変更される可能性があることを明確に示しています。のserailedストリームでの下位互換性は実際には期待できません。さらに、scala 2.10では、もはやクラスではありません。 これは、大幅に異なるクラスである単なるエイリアスです。serialVersionUID
ClassTypeManifest
ClassManifest
ClassTag
したがって、実際には、(Javaのシリアル化を使用して)シリアル化ClassManifest
して、別のバージョンのscalaで読み戻すことができると期待しないでください。
本当にJavaリフレクションを使用する必要がある場合は、ClassManifest
フィールドをjava.lang.Class
フィールド(常にシリアル化/逆シリアル化しても安全です)に置き換えてみてください。
それ以外の場合は、他のシリアル化ライブラリの使用を検討できます。
私はこれを解決しました。解決策は、Mavenライフサイクルをクリーンに使用してからインストールすることでした。