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

在目录名中存在句点时使用Java.exe运行,java,directory,period,Java,Directory,Period,我正在尝试运行我构建的java程序,但是我想从一个特定的目录运行它。当指定我要运行的类文件的相对路径时,该路径包含一个带句点的目录,它似乎让java绊倒了;例如,我尝试运行: java -classpath myPath/myPath-1.2.3/myLongPath myPath/myPath-1.2.3/myLongPath/myProg Java错误指出它找不到类(NoClassDefFoundError);这是有意义的,因为我看到java在不同的目录中查找,而不是我指定的目录;它正在寻

我正在尝试运行我构建的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上运行。感谢您的帮助。

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

在您的例子中,这似乎只是
myProg
,但要确定的是,main方法类的类名(包括包名)是什么

例如:


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

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

点可以出现在类路径中,没有问题。它不能存在于包名中,也就是说,它不能存在于类路径位置内的目录中。谢谢,您给出的示例帮助我找出了我做错的地方。因此命令应该是:java-classpath myPath/myPath-1.2.3/myLongPath myProg现在我看到包路径中从来没有句点,这就是为什么只要我正确指定包路径,我就永远不会遇到包路径中的句点问题。