2012-04-19 10 views
2

私は実行可能なjarファイルで奇妙な問題を解明しようとしています: xyz.jarはマニフェストファイル/のクラスパスを持ち、abc.jarライブラリに依存しています。javaマニフェストのクラスパスと-classpathの比較

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

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

-classpathは、$ CLASSPATH設定を上書きする必要があります。 -classpathを使用していても、javaがマニフェストクラスパスを見ている可能性はありますか?

答えて

6

-jarを指定すると、マニフェスト内のクラスパスのみが使用されます。その他は無視されます。クラスパスを再指定する必要がある場合は、-jarを使用しないでください。

-1

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

+0

正しくない-jarを使用すると、他のすべてのクラスパスは無視されます。 – EJP