java - 如何解决我的 Apache Tika 代码中的以下 "NoClassDefFoundError"问题?

标签 java apache apache-tika

我有一个利用 Apache Tika 1.14 的简单类,如下所示:

import java.io.File;
import java.io.IOException;

import org.apache.tika.Tika;
import org.apache.tika.exception.TikaException;
import org.apache.tika.mime.*;
import org.xml.sax.SAXException;
import org.apache.tika.config.*;


public class TikaExtraction {

   public static void main(final String[] args) throws IOException, TikaException {

      //Assume sample.txt is in your current directory              
      File file = new File("sample.txt");

      //Instantiating Tika facade class
      Tika tika = new Tika();
      String filecontent = tika.parseToString(file);
      System.out.println("Extracted Content: " + filecontent);
   }

}

但是,当我尝试运行它时,我收到以下错误消息:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tika/mime/MimeTypesReader at org.apache.tika.mime.MimeTypesFactory.create(MimeTypesFactory.java:158) at org.apache.tika.mime.MimeTypes.getDefaultMimeTypes(MimeTypes.java:577) at org.apache.tika.config.TikaConfig.getDefaultMimeTypes(TikaConfig.java:73) at org.apache.tika.config.TikaConfig.(TikaConfig.java:222) at org.apache.tika.config.TikaConfig.getDefaultConfig(TikaConfig.java:345) at org.apache.tika.Tika.(Tika.java:116) at TikaExtraction.main(TikaExtraction.java:17) Caused by: java.lang.ClassNotFoundException: org.apache.tika.mime.MimeTypesReader at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 7 more

当我搜索 Tika 库代码时,我没有看到 MimeTypesReader 类的 .class 文件。有没有办法注释掉一些代码或修复此问题 - 我将如何解决此错误消息?

或者这可能是我正在使用的 Tika 版本的问题(即引用的代码来自 1.6,也许我有 1.13 或 1.14)。

最佳答案

对于此类类型的库错误,它不是删除某些内容,而是添加缺少的内容,因此会出现 ClassNotFoundError。大多数时候,您要么缺少一些支持 jar,要么由于库更新而存在兼容性问题。其实你自己也说了

When I search through the Tika library code, I am not seeing the .class file for the MimeTypesReader class.

这是抛出异常的库方法:

/**
 * Creates and returns a MimeTypes instance from the specified document.
 * @throws MimeTypeException if the type configuration is invalid
 */
public static MimeTypes create(Document document) throws MimeTypeException {
    MimeTypes mimeTypes = new MimeTypes();

    //For some reason the MimeTypesReader is missing
    new MimeTypesReader(mimeTypes).read(document);
    mimeTypes.init();
    return mimeTypes;
}

确保您已提供完整的库以及最新的库 - tika-1.14。您可以从 these Apache mirrors 之一获取它。

源代码是 tika-core.jar 的一部分,因此请确保您也安装了它。

关于java - 如何解决我的 Apache Tika 代码中的以下 "NoClassDefFoundError"问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43151231/

相关文章:

java - SELECT FOUND_ROWS() 总是返回 1,如何解决这个问题

java - 使用 Java 在 Selenium WebDriver 中聚焦元素的正确方法

java - 在 java 中将像素值从灰度设置为 0 和 1 时丢失图像部分

java - Java 中的链表实现和垃圾收集

apache - Solr - DataImportHandler : Indexing failed. 回滚所有更改

php - 在退出 apache/xampp 之前运行命令

javascript - 是(或者可以)用 Nodejs http 服务器替代 Apache 或 IIS 等大型服务器

java - 使用 Apache tika 获取 MimeType 子类型

java - Apache 蒂卡 : Convert Apache Tika server REST endpoints(Jax-Rs) http to https

java - eclipse无法导入apache tika src