-classpath
option を とともに使用すると、 env 変数java
の内容が追加または置換されますか?CLASSPATH
4 に答える
クラスパス変数を使用すると、環境変数の CLASSPATH がオーバーライドされますが、そのセッションに対してのみです。アプリケーションを再起動する場合は、クラスパス変数を再度設定する必要があります。
はい。java(1)
マニュアルページから引用:
-classpath classpath
-cp classpath
Specifies a list of directories, JAR archives, and ZIP archives to search for class files. Class
path entries are separated by colons (:). Specifying -classpath or -cp overrides any setting of the
CLASSPATH environment variable.
If -classpath and -cp are not used and CLASSPATH is not set, the user class path consists of the cur-
rent directory (.).
両方ではなく、いずれかのオプションが使用されます。
-classpath または -cp を指定すると、CLASSPATH 環境変数の設定がオーバーライドされます。
...
-classpath オプションは、他のアプリケーションに影響を与えたり、他のアプリケーションがその値を変更したりすることなく、アプリケーションごとに個別に設定できるため、優先されます。
...
CLASSPATH 変数を設定するか、-classpath コマンドライン オプションを使用すると、そのデフォルトが上書きされるため、現在のディレクトリを検索パスに含める場合は、「.」を含める必要があります。新しい設定で。
-cp オプションを使用しても、CLASSPATH 環境変数には影響しません。
この小さなコード スニペットを試して、これを確認できます。
public class CPTest {
public static void main (final String[] args) {
String cp = System.getenv("CLASSPATH");
System.out.println(cp);
}
}
%echo $CLASSPATH
/home/test/:.
-cp オプションなしの出力:
%java CPTest
/home/test/:.
-cp オプションを使用した出力:
%java -cp /home/xanadu:. CPTest
/home/test/:.
両方の呼び出し (-cp を使用する場合と使用しない場合) の出力は同じです。
また、CLASSPATH環境変数で指定されたパスが
使用されるか、-cpオプションで指定されたパスが使用されます。それは両方の混合物ではなく、それらの1つです。
これは、以下の呼び出しから明らかです。CWD (現在の作業ディレクトリ"." )
が -cp オプションから除外されている場合
、CLASSPATH 環境変数に CWD ( "." ) が含まれているにもかかわらず、JVM ランチャー (つまり Java) はクラス ファイルを見つけることができません。
%java -cp /home/test CPTest
Exception in thread "main" java.lang.NoClassDefFoundError: CPTest