"p1.jar"、 "p2.jar"などのプロジェクトがあり、それらはすべてライブラリ "foo-1.0.0.jar"を使用しているとします。java:jarのバージョン間で互換性を確認する
新しいバージョン "foo-1.0.1.jar"が作成されているものとします。追加のチェックとして、すべてのプロジェクトp1、p2、...が新しいfoo-1.0.1.jarを使用して再コンパイルされます。コンパイルエラーは表示されません。
ここで、本番環境では、foo-1.0.0.jarはfoo-1.0.1.jarに置き換えられました。 p1.jar、p2.jar、...の更新は行われません。残念ながら、すべてがクラッシュします。
新しいライブラリが古いものに置き換わる可能性は100%であることを他のチェックで確認できますか?
明らかに、新しいライブラリに導入されたコードエラーのチェックや機能の変更については言及していません(たとえば、新しいバージョンの関数「sum」が加算ではなく減算を行う場合)。しかし、少なくとも引数の変化、その結果、使用可能なクラスなど
一例をチェックし、FOO-1.0.0.jarは、メソッドが含まれます:
int m1() {
// some code
return 0; // always return 0, and ignored by the users
}
にそれが変更されたのfoo-1.0.1ということをTo:
void m1() {
// some code
}
残念ながら、この方法の結果は「int型M1()」を探していたときに、「NoSuchMethod」例外で失敗します(ないCで)Javaでマングル名とp1.jarの一部です。あなたがfoo-1.0.0を持っている場合jar x
javap
あなたの投稿をもう一度読んだ後。メソッドのシグネチャのみをチェックしたい場合は、コンパイル時に互換性のない変更があるかどうかを、新しいライブラリに対する単純なコンパイルによって知ることができます。しかし、このような弱い点検で何を達成したいのですか?エラーなしでコンパイルすると、実行時に失敗しないという保証はありません。 – SubOptimal
@SubOptimal:正確には、ランタイム互換性の保証が対象です。 –
ランタイムの互換性が必要な場合は、私の投稿された回答を参照してください。最も安全な方法は、新しいバージョンでテストコードを実行することです。 – SubOptimal