Java
で-classpath
オプションを使用すると、CLASSPATH
環境変数の内容を追加または置換できますか?
クラスパス変数を使用すると、環境変数のCLASSPATHがオーバーライドされますが、そのセッションに対してのみです。アプリケーションを再起動する場合は、クラスパス変数を再度設定する必要があります。
はい。 Java(1)
のmanページから引用:
-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/:.
出力は両方の呼び出しで同じです(1つは-cpあり、もう1つはなし)。
また、 クラスパス 環境変数は
使用済みまたはで指定されたパス -cp オプションが使用されます。両方の混合ではなく、それらの1つです。
これは、以下の呼び出しから明らかです。 CWD(現在の作業ディレクトリ 「」)
は-cpオプションから除外されているため、JVMランチャー(つまりJava)は
CWDを含むCLASSPATH環境変数にもかかわらず、クラスファイル(「」) 初期化。
%Java -cp /home/test CPTest
Exception in thread "main" Java.lang.NoClassDefFoundError: CPTest