“java -classpath .:”的意思是什么?

4

文档中没有提到这一点但是在没有使用:时调用它会出现ClassNotFoundException。

完整代码行:

java -classpath .:soy-20100708.jar HelloWorld

这也可以正常工作...


java -classpath :soy-20100708.jar HelloWorld
3个回答

5

:用于分隔类路径条目。

因此,.:soy-20100708.jar表示“在当前目录和soy-20100708.jar内搜索”。

第二种变体“:soy-20100708.jar”没有特殊含义(它是格式错误的)。它可能会以某种方式被解释,但我不知道任何特殊含义。

您能发布jar文件的内容吗?它包含哪些文件以及在哪些目录中?


@Jaochim:这是来自Closure模板教程的内容,以下是包含所有.jar文件的zip链接:http://closure-templates.googlecode.com/files/closure-templates-for-java-latest.zip。 - Blub
1
@Blub:在Windows上使用;,因为:已经用于表示驱动器路径。类Unix平台使用: - Joachim Sauer
还有: 在 soy-20100708.jar 中没有 HelloWorld.class,所以它必须在当前目录中,这意味着您需要在类路径中包含 . - Joachim Sauer

1

"." 表示当前目录也会被搜索,":" 是路径分隔符。如 this website 所述,分隔符取决于平台:

CLASSPATH 分隔符是平台相关的。您也可以通过系统属性来发现它。它通常是 ; 或 :。您必须显式地将 ".", 当前目录,放在 CLASSPATH 上。


1
在Unix环境中,冒号“:”是路径分隔符,而在Windows上分号“;”用于分隔路径。例如,您可以编写:
java -classpath a.jar:b.jar OR java -classpath a.jar;b.jar

它将两个JAR文件加载到路径中。 点号“。”表示当前目录。请注意,只会在目录中搜索*.class文件,而不是包。

以冒号开头的版本未被文档覆盖(据我所知),因此可能仅意外起作用(可能也会将当前目录添加到类路径中)

编辑: 我刚刚发现,在JAVA 6中,dir/*可以找到目录中的所有JAR文件


“:”是Unix系统上的标准路径分隔符,就像Windows系统上的“;”一样。请使用适用于您所在系统的分隔符。 - Paŭlo Ebermann

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