2

実行可能なjarファイルで発生した奇妙な問題を理解しようとしています.xyz.jarにはマニフェストファイルにクラスパスがあり、abc.jarライブラリに依存しています。

残念ながら、xyz.jar のマニフェスト クラスパスは正しくありません。災害から救うために、使用する実行コマンドを更新しています: java -classpath path/abc.jar:etc の代わりに java -jar

問題は、abc.jar がクラスパスにない場合を除き、xyz.jar の誤動作です。abc.jar が削除されると、プログラムは正しく実行され、例外はスローされません。なんで?xyz.jar は、別の場所から abc.jar を取得している必要があります。xyz.jar は abc.jar のメソッドを呼び出します。

-classpath は、すべての $CLASSPATH 設定をオーバーライドする必要があります。-classpath を使用している場合でも、Java がまだマニフェスト クラスパスを参照している可能性はありますか?

4

2 に答える 2

-1

jar マニフェスト ファイルの Class-Path 属性は、その jar 内のクラスの依存関係を宣言するために使用されるため、メインのクラスパスとは無関係であると私は信じています。java コマンドで -cp を使用すると ClassPath 環境変数が置き換えられるのは事実ですが、各 jar の個々の Class-Path には影響しません。

于 2012-04-19T18:44:36.007 に答える