27

是否会使用-classpath选项 with java、添加或替换CLASSPATHenv 变量的内容?

4

4 回答 4

20

使用类路径变量,它会覆盖环境变量的 CLASSPATH,但仅适用于该会话。如果您重新启动应用程序,您需要再次设置类路径变量。

于 2010-01-29T14:13:04.917 回答
8

是的。从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 (.).
于 2010-01-29T11:11:52.130 回答
7

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

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

...

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

...

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

于 2010-01-29T11:12:15.440 回答
7

-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
于 2010-01-29T12:18:29.063 回答