让我们假设一个项目的以下文件夹结构: ProjectName / src / package_name
所有需要编译的源文件都在 package_name 文件夹中。
尝试使用java ClassName
命令从 package_name 文件夹编译程序时,发生错误( java.lang.NoClassDefFoundError )。
另一方面,在 src 文件夹(java package_name/ClassName
)中使用的类比命令是正确的。
在我的理解中,这是因为
如果未使用-classpath和-cp且未设置CLASSPATH,则 用户类路径由当前目录(。)组成。
但是,虽然在 ProjectName / src / package_name 中,java -cp .. ClassName
会产生上述错误,尽管我认为在上面的一个目录中它应该等效于java -cp . package_name/ClassName
。
类似地,当尝试从光盘上的不同位置(使用本地路径和绝对路径)运行程序时,我遇到了相同的错误。
知道为什么吗?
编辑:
令人惊讶的是,命令java -cp .. package_name/ClassName
(以及与之对应的'。'会产生相同的结果)现在引发不同的错误。在 ProjectName / files 中,我的程序正在读取一些.txt文件,上述命令会引发FileNotFoundException,而src目录中的java package_name/ClassName
不会。这意味着运行文件的目录会影响正在计算相对路径的位置。是吗?