【问题标题】:running with Java.exe when period exists in directory name当目录名称中存在句点时使用 Java.exe 运行
【发布时间】:2010-02-18 08:15:12
【问题描述】:

我正在尝试运行我构建的 java prog,但我想从特定目录运行它。当指定我要运行的类文件的相对路径时,该路径包含一个带有句点的目录,它似乎使 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 period directory


    【解决方案1】:

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

    在你的情况下,这似乎只是myProg,但要确定,主方法的类的类名(包括包名)是什么?

    例子:

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

    【讨论】:

    • 谢谢,你给出的例子帮助我弄清楚我做错了什么。所以命令应该是: java -classpath myPath/myPath-1.2.3/myLongPath myProg 现在我看到包路径中从来没有句点,这就是为什么我永远不会遇到包路径中的句点问题所以只要我正确指定了我的包路径。
    【解决方案2】:

    Java 使用句点作为包组件分隔符,因此它根本不能出现在类名中。由于类名与目录结构相关联,因此它也不能出现在类路径中使用的目录名中,并且再多的转义也无济于事。 (使用目录分隔符本身作为包组件分隔符会更好,但它们在操作系统之间有所不同,Java 想要独立于操作系统。这是为此付出的代价之一。)

    【讨论】:

    • 点可以出现在类路径中,没有问题。它不能存在于包名中,即它不能位于类路径位置内部的目录中。
    猜你喜欢
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多