2010-01-29 73 views
16

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

+3

好问题。我从来没有想过它 – marionmaiden 2010-01-29 11:12:53

+1

你想知道环境变量是否改变?你运行了一个测试来实际*看到*如果它改变了吗? – 2010-01-29 11:14:03

+0

为什么不自己尝试一下? – 2010-01-29 12:06:55

回答

14

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

+1

完美。谢谢girienie一个简洁的答案。您必须是Java专家:) – Zacky112 2010-02-01 10:22:29

+0

@ Zack112:非常重要的问题..谢谢:) – giri 2010-02-01 11:44:27

5

是的。从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

根据这个,环境变量根本不*更新。我不明白答案是“是”。 – 2010-01-29 11:14:42

+2

@ S.洛特 - 从谁的角度来看?从*程序的*角度来看,CLASSPATH值(如果存在)被替换。从* shell的角度来看,CLASSPATH值不会改变。我认为最初的问题只是措辞不当。 – Nate 2010-01-29 13:49:29

6

无论是其中一个选项时,不能同时使用。

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

...

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

...

设置CLASSPATH变量或使用-classpath命令行选项将覆盖默认的,所以如果你想在搜索路径当前目录,则必须包含“ “。在新的设置中。

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)无法找到尽管包含CWD CLASSPATH环境变量的
类文件(“” ) 在里面。

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