Java ライブラリを JAR としてパッケージ化していますが、そこからメソッドを呼び出そうとすると、多くの がスローされますjava.lang.IncompatibleClassChangeError
。これらのエラーはランダムに表示されるようです。このエラーの原因にはどのような問題が考えられますか?
ベストアンサー1
これは、クライアント コードを再コンパイルせずに、ライブラリに互換性のないバイナリ変更を加えたことを意味します。Java言語仕様 §13 では、このような変更がすべて詳細に説明されていますが、最も顕著なのは、非static
プライベートのフィールド/メソッドを非プライベートに変更することstatic
、またはその逆の変更です。
新しいライブラリに対してクライアント コードを再コンパイルすれば、準備は完了です。
更新: パブリック ライブラリを公開する場合は、いわゆる「バイナリの下位互換性」を維持するために、互換性のないバイナリ変更をできるだけ避ける必要があります。依存関係 jar のみを更新しても、アプリケーションやビルドが壊れることは理想的ではありません。バイナリの下位互換性を壊す必要がある場合は、変更をリリースする前にメジャー バージョン番号を増やす (例: 1.xy から 2.0.0 に) ことをお勧めします。