web-dev-qa-db-ja.com

Java -classpathオプション

Java-classpathオプションを使用すると、CLASSPATH環境変数の内容を追加または置換できますか?

19
Zacky112

クラスパス変数を使用すると、環境変数のCLASSPATHがオーバーライドされますが、そのセッションに対してのみです。アプリケーションを再起動する場合は、クラスパス変数を再度設定する必要があります。

15
giri

はい。 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 (.).
7
Robert Munteanu

どちらか一方のオプションが使用され、両方は使用されません。

-classpathまたは-cpを指定すると、CLASSPATH環境変数の設定が上書きされます。

...

-classpathオプションは、他のアプリケーションに影響を与えたり、他のアプリケーションがその値を変更したりすることなく、アプリケーションごとに個別に設定できるため、推奨されます。

...

CLASSPATH変数を設定するか、-classpathコマンドラインオプションを使用すると、そのデフォルトが上書きされるため、現在のディレクトリを検索パスに含める場合は、「。」を含める必要があります。新しい設定で。

7
miku

-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
6
sateesh