首页 > 解决方案 > Eclipse 无法从 Jar 加载类

问题描述

Eclipse JRE 4.15.0

我添加(从https://stanfordnlp.github.io/CoreNLP/api.htmlstanford-corenlp-4.0.0.jar加载)到项目/构建路径/库/类路径。创建实例时CoreDocument

CoreDocument document = new CoreDocument("str");

Eclipse 自动建议

import edu.stanford.nlp.pipeline.StanfordCoreNLP;

然而在执行期间导入不起作用:

Exception in thread "main" java.lang.NoClassDefFoundError: edu/stanford/nlp/pipeline/CoreDocument
    at main.CoreNLP.main(CoreNLP.java:35)
Caused by: java.lang.ClassNotFoundException: edu.stanford.nlp.pipeline.CoreDocument

如何解决自动建议和运行时导入之间的这种不一致?

标签: javaeclipsejar

解决方案


看起来这个库不是独立的。即它取决于其他一些库。因此,您不能只将单个 JAR 添加到您的项目并运行为,因为您还需要添加该 JAR 的依赖项及其依赖项等。这些依赖称为传递依赖。

我怎么知道?这是他们的下载页面的内容:

斯坦福 CoreNLP 可以通过下面的链接下载。这将下载一个大的 (536 MB) zip 文件,其中包含 (1) CoreNLP 代码 jar,(2) CoreNLP 模型 jar(大多数任务的类路径中需要)(3)运行 CoreNLP 所需的库,以及 (4)项目的文档/源代码。这就是继续英语的一切!解压缩此文件,打开生成的文件夹,您就可以使用它了。

看到第 3 项了吗?

再引用一句:

Maven:您可以在 Maven Central 上找到 Stanford CoreNLP。要知道的关键是CoreNLP 需要它的模型来运行(除了标记器和句子拆分器之外的大部分部分),因此您需要在 pom.xml 中指定代码 jar 和模型 jar,如下所示:(注意:Maven发布通常在网站发布几天后发布。)

因此,使用它的最佳方式是让 Gradle 或 Maven 等构建工具下载所有依赖项并构建您的构建类路径。他们在该下载页面上有 Maven 的示例:

<dependencies>
    <dependency>
        <groupId>edu.stanford.nlp</groupId>
        <artifactId>stanford-corenlp</artifactId>
        <version>4.0.0</version>
    </dependency>
    <dependency>
        <groupId>edu.stanford.nlp</groupId>
        <artifactId>stanford-corenlp</artifactId>
        <version>4.0.0</version>
        <classifier>models</classifier>
    </dependency>
</dependencies>

推荐阅读