-cp ./为什么在运行Java时我总是必须手动将CWD包含在CP中?

时间:2014-09-13 00:02:25

标签: java classpath working-directory

我从来没有遇到过这个问题,当我去运行Java程序(在终端中)时,我只想说,

    java className

程序将运行。但是最近当我尝试这个时,我得到了错误,

  

无法找到或加载主类className

要解决此问题,我已将-cp ./我的工作目录添加到类路径中,然后程序运行。我不确定要添加到我的环境变量中的内容,以便当前工作目录总是在类路径上,从而避免使用这个更长的脚本,

    java -cp ./ className

根据this StackOverflow帖子,Oracle的标准实现首先在当前工作目录中查找类名。

(我使用的是Java 8和Windows 8.1)

1 个答案:

答案 0 :(得分:3)

如果在命令行中找不到类路径,但在CLASSPATH环境变量defaults to the current directory中找不到。

  

-cp classpath

     

指定用于搜索类文件的目录,JAR文件和ZIP存档的列表。用分号(;)

分隔类路径条目      

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

     

如果未使用-classpath和-cp且未设置CLASSPATH,则用户类路径由当前目录(。)组成。

如果指定-cp,则必须在类路径中明确包含.(当前目录),否则它将不包括在内。

如果不使用-cp无法正常工作,但明确说明-cp .确实有效,那么您必须定义CLASSPATH环境变量,并且不得明确包含{ {1}}。这可以解释为什么通过将.CLASSPATH选项包括在一起来覆盖.