Java -classpath选项

时间:2010-01-29 11:10:33

标签: java jvm classpath environment-variables jvm-arguments

-classpath选项与java的使用,是否会添加或替换CLASSPATH env变量的内容?

4 个答案:

答案 0 :(得分:15)

使用classpath变量,它会覆盖Environment变量的CLASSPATH,但仅覆盖该会话。如果重新启动应用程序,则需要再次设置classpath变量。

答案 1 :(得分:7)

是。引自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 (.).

答案 2 :(得分:7)

使用其中一个选项,而不是两个选项。

  

指定-classpath或-cp会覆盖CLASSPATH环境变量的任何设置。

...

  

首选-classpath选项,因为您可以为每个应用程序单独设置它,而不会影响其他应用程序,也不会修改其值的其他应用程序。

...

  

设置CLASSPATH变量或使用-classpath命令行选项会覆盖该默认值,因此如果要在搜索路径中包含当前目录,则必须包含“。”。在新设置中。

答案 3 :(得分:6)

-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 选项指定的路径。它不是两者的混合 它就是其中之一。

从下面的调用中可以看出这一点。 如果CWD(当前工作目录“。”
从-cp选项中排除,JVM启动程序(即java)找不到 尽管CLASSPATH环境变量包含CWD(“。”),但仍为类文件。

%java -cp /home/test CPTest
Exception in thread "main" java.lang.NoClassDefFoundError: CPTest