尝试使用类路径运行Java程序; Java无法找到我原来的编译类

时间:2018-09-26 18:39:46

标签: java javac


Java的菜鸟在这里。我正在尝试编译一个使用stanford-corenlp-3.9.1.jar的Java程序。我正在尝试使用MacOS终端进行编译。以下是各种命令的输出

javac QuestionsToAnswer.java
这会导致大量错误
QuestionsToAnswer.java:5: error: package edu.stanford.nlp.trees does not exist import edu.stanford.nlp.trees.Tree; ^ QuestionsToAnswer.java:6: error: package edu.stanford.nlp.trees.tregex does not exist import edu.stanford.nlp.trees.tregex.TregexMatcher; ^ ...

所以我改为运行:
javac -cp stanford-corenlp-3.9.1.jar QuestionsToAnswer.java
这将按预期工作,并创建一个QuestionToAnswer.class文件。

然后当我尝试运行程序时
java QuestionsToAnswer
它给了我以下错误:
Error: Unable to initialize main class QuestionsToAnswer Caused by: java.lang.NoClassDefFoundError: edu/stanford/nlp/trees/Tree

要解决此问题,我将类路径添加到java命令中,以便它能够从斯坦福大学的图书馆中找到Tree
java -cp stanford-corenlp-3.9.1.jar QuestionsToAnswer
然后出现以下错误:
Error: Could not find or load main class QuestionsToAnswer Caused by: java.lang.ClassNotFoundException: QuestionsToAnswer

添加类路径后,java无法找到我的原始类文件,该文件已被编译并存在于目录中。我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

jar文件必须位于类路径中,因为您的代码使用此jar中的类。因此Java必须能够找到它们。

包含您的类的目录也必须在类路径中,否则Java可能找不到它。

java -cp .:stanford-corenlp-3.9.1.jar QuestionsToAnswer

在Unix / MacOS上,或

java -cp .;stanford-corenlp-3.9.1.jar QuestionsToAnswer

在Windows上。