这里是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
斯坦福图书馆的类(class)
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无法找到已编译并存在于目录中的原始类文件。我在这里做错了什么?
最佳答案
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 上。
关于java - 尝试使用类路径运行Java程序; java找不到我原来编译的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52524205/