是否会使用-classpath
选项 with java
、添加或替换CLASSPATH
env 变量的内容?
4 回答
使用类路径变量,它会覆盖环境变量的 CLASSPATH,但仅适用于该会话。如果您重新启动应用程序,您需要再次设置类路径变量。
是的。从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 (.).
使用其中一个选项,而不是两者。
指定 -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/:.
两次调用的输出都是相同的(一个带有 -cp 一个没有)。
此外,要么使用CLASSPATH环境变量中指定的路径,要么使用使用-cp选项
指定的路径。它不是两者的混合,它是其中之一。
从下面的调用中可以明显看出这一点。如果 CWD(当前工作目录“.”)
从 -cp 选项中排除,则 JVM 启动器(即 java)无法找到
类文件,尽管 CLASSPATH 环境变量中包含 CWD(“.”)。
%java -cp /home/test CPTest
Exception in thread "main" java.lang.NoClassDefFoundError: CPTest