1

A.jar にパッケージ化された Java アプリケーションを実行します。このアプリケーションでは、B.jar のいくつかのクラスが使用されます。

関連するすべての jar は、クラスパスに含まれる特定のディレクトリに配置されます。

プログラムは次のようになります。

main(){

    run method ClassA.M1() in A.jar;  //the method may keep running for 2 minutes

    do some other prepare;

    call method ClassB.M2 in B.jar;

}

プログラムが M1 を実行しているときに、手動で B.jar を新しいバージョンに置き換えました (名前も B.jar です)。

しかし、プログラムは ClassNotFoundException をスローします。

その後、プログラムを再起動すると、正常に動作します。

したがって、私の質問は、jar パスと jar 名が変更されていないため、ClassNotFoundException がスローされる理由です。クラスローダーは問題なくそれをロードする必要があります。

道順を教えてください。

4

1 に答える 1

1

jar ファイルを実行時に同じ名前のファイルに置き換えて単純に変更することはできません。これは、クラス ローダーがすでにそこからいくつかのクラスをロードしている可能性があるためです。

このような動作をサポートする必要がある場合は、ホット リプレース メカニズムを提供するライブラリまたはフレームワークを調べる必要があります。

クラスローダーをよりよく理解するのに役立つ 2 つの記事を次に示します。

この件に関する記事は他にもたくさんありますし、関連する質問もここ Stack OverFlow にあるので、もっと読むことをお勧めします。

于 2013-01-15T13:50:33.317 に答える