-3

なぜこのエラーが発生するのですか?

Serialization Problem 
  java.io.InvalidClassException: scala.reflect.ClassTypeManifest; 
  local class incompatible: stream classdesc serialVersionUID =

intellijを使用する

4

2 に答える 2

2

推測させてください:あなたは(Javaの組み込みシリアル化を介して)(サブタイプである)を含むクラスをClassManifestファイルClassTypeManifest(またはデータベース)にシリアル化し、次にscalaバージョンをアップグレードし、そのファイルを逆シリアル化しようとしています。 ?または、シリアル化されたオブジェクトをあるJVMプロセスから別のプロセスに送信していて、それらが異なるバージョンのscalaを実行している場合。

まあ、それをしないでください。最初の理由は、明示的なフィールドをClassTypeManifest宣言しないことです( serialVersionUIDとは何ですか、なぜそれを使用する必要があるのですか?)。これは、クラスを変更するとシリアル化形式が変更される可能性があることを明確に示しています。のserailedストリームでの下位互換性は実際には期待できません。さらに、scala 2.10では、もはやクラスではありません。 これは、大幅に異なるクラスである単なるエイリアスです。serialVersionUIDClassTypeManifestClassManifestClassTag

したがって、実際には、(Javaのシリアル化を使用して)シリアル化ClassManifestして、別のバージョンのscalaで読み戻すことができると期待しないでください。

本当にJavaリフレクションを使用する必要がある場合は、ClassManifestフィールドをjava.lang.Classフィールド(常にシリアル化/逆シリアル化しても安全です)に置き換えてみてください。

それ以外の場合は、他のシリアル化ライブラリの使用を検討できます。

于 2013-02-06T13:14:11.060 に答える
0

私はこれを解決しました。解決策は、Mavenライフサイクルをクリーンに使用してからインストールすることでした。

于 2013-05-06T15:27:27.930 に答える