在目录名称中存在句点时使用Java.exe运行

时间:2010-02-18 08:15:13

标签: java directory period

我正在尝试运行我已构建的java编程,但我想从特定目录运行它。当指定我想要运行的类文件的相对路径时,该路径包含一个带有句点的目录,它似乎正在绊倒java;例如,我尝试运行:

java -classpath myPath/myPath-1.2.3/myLongPath myPath/myPath-1.2.3/myLongPath/myProg

Java错误说它无法找到类(NoClassDefFoundError);这是有道理的,因为我看到java正在寻找与我指定的目录不同的目录;它正在寻找:     mypath中/ mypath中-1/2/3 / myLongPath 代替:     mypath中/ mypath中-1.2.3 / myLongPath

尽我所能,我无法弄清楚如何指定java.exe我希望它查找的目录包含句点。我试图逃避时期,但这没有帮助。有人遇到过这个问题吗?顺便说一下,我在gnome终端上运行linux。谢谢你的帮助。

2 个答案:

答案 0 :(得分:8)

调用java的最后一个参数是要运行的类的名称。这不是文件名,而是类名。它包括完整的包名称(除非该类在默认包中),由点(不是斜杠)分隔。类名和任何包名都不能包含点。代表程序包路径的文件夹不得包含在类路径中包含的目录中(只有类文件夹的顶级目录应该在那里)。

在你的情况下,这似乎只是myProg,但为了确保使用main方法的类的类名(包括包名)是什么?

示例:

如果我有一个类mypackage.mysubpackage.MainClass,并且类文件在/home/me/project/1.3/build/mypackage/mysubpackage/MainClass.class中,那么运行该类的命令将是java -cp /home/me/project/1.3/build mypackage.mysubpackage.MainClass

答案 1 :(得分:0)

Java使用句点作为包组件分隔符,因此它不能出现在类名中。由于类名与目录结构相关联,因此它也不会出现在类路径中使用的目录名中,并且没有任何转义可以帮助您。 (最好将目录分隔符本身用作包组件分隔符,但它们在操作系统之间有所不同,而Java希望与操作系统无关。这是为此付出的代价之一。)