【问题标题】:Running Java Program in Sub-Directory在子目录中运行 Java 程序
【发布时间】:2011-05-10 00:23:34
【问题描述】:

如果我的格式错误,请提出建议,这是我第一次在这里发布问题。使用 UNIX,我无法从顶级目录运行 Java 程序“Master”(位于子目录中)。从顶层编译工作得很好,但我实际上不能从顶层运行java代码。我想我可能误解了类路径/类路径标志。我的目录结构是这样的:/top-level/src/amsPassageretriever。

当我尝试从顶级目录运行所有内容时,我收到以下错误:

user:~/top-level$ javac -classpath :/NLP_TOOLS/info_retrieval/lucene/latest/lucene-core-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/demo/lucene-demo-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/wordnet/lucene-wordnet-3.1.0.jar:/NLP_TOOLS/info_retrieval/lemur/latest/share/indri/indri.jar src/amsPassageretriever/*.java
user:~/top-level$ java -classpath :/NLP_TOOLS/info_retrieval/lucene/latest/lucene-core-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/demo/lucene-demo-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/wordnet/lucene-wordnet-3.1.0.jar:/NLP_TOOLS/info_retrieval/lemur/latest/share/indri/indri.jar src/amsPassageretriever/Master
Exception in thread "main" java.lang.NoClassDefFoundError: src/amsPassageretriever/Master (wrong name: amsPassageretriever/Master)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: src/amsPassageretriever/Master.  Program will exit.

【问题讨论】:

    标签: java unix classpath noclassdeffounderror


    【解决方案1】:

    java 的参数不是文件,它是类路径中的类的全限定类名(您要执行的主类)。

    听起来你想要的课程是amsPassageretriever.Master(我假设你在帖子末尾打错了包amsPassageretrieve)。

    因此你应该调用:

    java -classpath :/NLP_TOOLS/info_retrieval/lucene/latest/lucene-core-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/demo/lucene-demo-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/wordnet/lucene-wordnet-3.1.0.jar:/NLP_TOOLS/info_retrieval/lemur/latest/share/indri/indri.jar amsPassageretriever.Master
    

    更新: 如果您希望它在您不在 src 中时正常运行,那么您也需要将该目录添加到您的类路径中:

    java -classpath /home/user/top-level/src:/NLP_TOOLS/info_retrieval/lucene/latest/lucene-core-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/demo/lucene-demo-3.1.0.jar:/NLP_TOOLS/info_retrieval/lucene/latest/contrib/wordnet/lucene-wordnet-3.1.0.jar:/NLP_TOOLS/info_retrieval/lemur/latest/share/indri/indri.jar amsPassageretriever.Master
    

    【讨论】:

    • 对不起,我确实打错了。我编辑了我的帖子以更好地构建问题。我尝试从 /top-level 运行你的命令行,但我仍然得到同样的错误。我尝试了中间 /src 文件夹的各种排列(src/amsPassageretriever.Master 或 src.amsPassageretriever.Master),但没有骰子。
    • 是的,刚刚发现您的 src 目录不在您的类路径中。已发布更新。
    • 太棒了,我刚刚用你的更新试过了,它可以工作。感谢您的帮助!
    • 另外,您可能需要考虑将编译器输出放在与源代码不同的目录中。如果这样做,则需要更改类路径以指向该目录。
    【解决方案2】:

    尝试java amsPassageretrieve.Master as amsPassageretrieve 是我所看到的包

    如果您的类需要,您可能还需要添加类路径变量

    【讨论】:

      【解决方案3】:

      您正在输入“retrieve”和“retriever”,这是两个不同的词

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-29
        • 2011-02-23
        • 1970-01-01
        相关资源
        最近更新 更多