Java クラス パスに相対パスがある場合、現在の作業ディレクトリを検索するだけです。マニフェスト ファイルで宣言されたクラス パスについても同じことが言えます。マニフェスト ファイルでは、それは jar があるディレクトリに対して相対的ですか?
元。コマンドライン
java -cp somejar.jar
または
マニフェスト
Class-Path: somejar.jar
クラスパス-cp somejar.jar
に追加していると言う場合。コマンドを入力したときに現在いるディレクトリからsomejar.jar
のみ検索を試みます。somejar.jar
マニフェストで言うなら
Class-Path: somejar.jar
somejar.jar
マニフェストが配置されているディレクトリ(別名jar内)からクラスパスにjarを追加すると言っています。
補足として、-jar、-cp、または -classpath を使用してクラスパスを指定すると、システム変数 CLASSPATH がオーバーライドされます。
詳細については、http://docs.oracle.com/javase/tutorial/deployment/jar/downman.htmlを参照してください。
あなたは実際に2つの異なるケースについて言及しました:
ケース #1
java -cp foo/bar/somejar.jar ...
この場合、JAR (または何でも) への相対パスは、現在のディレクトリに対して相対的に解決されます。
ケース#2
java -jar foo/bar/somejar.jar ...
somejar.jar が含まれている場所
Class-Path: anotherjar.jar
この場合、「foo/bar/somejar.jar」は現在のディレクトリに対して相対的に解決されますが (上記のように)、「anotherjar.jar」は「somejar.jar」を含むディレクトリに対して相対的に解決されます。
-cp
(余談ですが、JARファイルがまたはを介してインクルードされた場合、 Manifest Class-Path: 属性が尊重されると理解していますが$CLASSPATH
、そのJARからロードされたクラスの依存関係にのみ影響します...以下の「findingclasses」リンクを参照してください。)
参考文献: