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

标签 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斯坦福图书馆的类(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/

相关文章:

java - 如何使用 ant-javac 仅清理 destDir 中不再位于源目录中的文件

java - Ant 构建 - javac 任务 - 排除目录然后包含子目录

java - 来自 XML 的 MapView 的 Android InflateException

JAVA:无法使用 xor 获取字符串中的加密数据

java - 在完成期间引用对象

java - 为什么在 Ubuntu 中有很多 Java 的文件夹?

java - 我们公司计划转向采用运行 Wildfly 10 的 AdoptOpenJdk 11

java - BDD 方式的 JUnit 测试应该如何集中

java - java程序中的"Cannot find symbol"

Windows 上带有自定义包的 Java 类路径