4

Java では、最近、それぞれがクラスを定義する 2 つの異なる jar を取得するケースに直面しました。問題は、これらの jar の 1 つが古く、問題のクラスには 1 つの jar に存在するメソッドがなく、他の jar には存在しないということでした。

そのため、コードで使用されているメソッドが見つからないというエラーが発生していました。最終的に古いjarを削除して、正しいjarをインポートすることでこれを解決できました。

多くの人がこれと同じコードを使用し (同じ 2 つの競合するインポートされた jar を使用)、この問題は発生しませんでした。したがって、彼らは最新の jar をインポートしていたに違いありません。

私の質問は次のとおりです。ある jar を別の jar にインポートした原因は何ですか? どれが「使用される」かを決定するロジックは何ですか?

ありがとう!

4

3 に答える 3

6

注文に基づきます。最初のものが使用され、2番目のものが問題を引き起こし始めます。

同じクラスの異なるバージョンを含めないようにしてください。そのため、奇妙なバグに遭遇する可能性があります。

于 2012-04-25T17:14:15.773 に答える
2

クラスパスは、同じ名前のプログラムが複数ある場合に実行するプログラムを PATH が決定するのと同じ方法で順序を決定します。

奇妙なバグが発生する可能性がありますが、ほとんどの場合、jar の複数のバージョンを使用しても問題はありません (つまり、しばらくの間存在していた可能性があり、テストが難しいということです)。

于 2012-04-25T17:18:59.790 に答える
1

あなたのを見てくださいCLASSPATH。jar ファイルが に表示される順序はCLASSPATH?

CLASSPATH変数 (またはコマンドライン引数、またはフレームワークがクラ​​スを検出する方法) を明示的に設定しない場合は、必要なクラスが前に表示されるように設定します。

于 2012-04-25T17:18:46.460 に答える