当前路径“.”是否默认在类路径中?

13

第二个命令会将当前路径添加为另一个搜索路径吗?

javac -cp /home/tim/program_files/programming/java/junit-4.11.jar MyTest.java

javac -cp .:/home/tim/program_files/programming/java/junit-4.11.jar MyTest.java

用冒号分隔多个路径,是正确的方法吗?

当前路径默认总是在ClassPath中,因此无需显式指定,是这样吗?

谢谢。

5个回答

16

从 Oracle 的 页面 关于设置类路径:

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

在 Windows 中使用 ; ,在类Unix操作系统中使用 : 作为多个路径的分隔符。


8
如果你添加了classpath,那么当前路径会被省略,这是一种非常非常不愉快意外的行为:(
此外,为了添加当前路径,我发现(至少对于ubuntu),在classpath中添加 . 不够的,而你必须添加 ./* 例如(这个不会起作用) java -ea -cp ".:lib/*" org.testng.TestNG suites/regression.xml 如果你的当前路径中有一个jar文件,它不会起作用
正确的方法是 java -ea -cp "./*:lib/*" org.testng.TestNG suites/regression.xml 我希望没有人会开枪或心脏病发作!

“正确的是 java -ea -cp "./*" ...” 成了我的救命稻草。默认设置甚至不能给你 Scala 3.2.2 的预期行为。谢谢! - 404

5

以下翻译内容来自帮助页面(适用于Windows)

-classpath classpath
-cp classpath

    Specifies a list of directories, JAR files, and ZIP archives to
    search for class files. Separate class path entries with semicolons
    (;). Specifying -classpath or -cp overrides any setting of the
    CLASSPATH environment variable.

    If -classpath and -cp are not used and CLASSPATH is not set, then the
    user class path consists of the current directory (.).
请注意,Windows平台上路径的分隔符是分号;,而在其他平台上是冒号:。这符合各个平台上标准的路径系统。

4
第二个命令是否将当前路径添加为另一个搜索路径?
是的。
用冒号分隔多个路径是正确的方法吗?
这取决于平台,在Unix平台上,使用“:”有效,在Windows上,需要使用“;”。
当前路径默认情况下始终在ClassPath中,因此无需显式指定,对吗?
默认情况下,当前目录存在,除非您在第一种情况下使用-cp覆盖它,在第二种情况下存在。

0
解决方案:只需删除环境变量"CLASSPATH",然后重新启动终端(命令提示符)即可。
说明:一旦您将其删除,它将使用其(CLASSPATH)默认值,有关更多信息,您可以参考此处

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接