java - 简单的 Tika 型探测器和 Apache POI

标签 java maven apache-poi apache-tika

我正在使用 Apache Tika、1.7 和 Apache POI 从 Maven 构建的项目中的 .doc 和 docx 文档中提取文本。由于某种原因,我得到了

java.lang.NoSuchMethodError: org.apache.poi.util.IOUtils.calculateChecksum

错误。正如 Apache POI FAQ 中所述,这是版本问题造成的。所以显而易见的解决方案是升级 POI 之类的。问题是我使用的是 tika-parsers 包中与 tika 捆绑在一起的 POI 版本。这是因为我使用的是 Tika 类型检测器,这是我使用的 Tika 的唯一部分(POI 除外)。问题是,如果我仅使用 tika-core 包并在 maven pom.xml 中独立声明 POI 依赖项,Tika 检测器将停止检测容器类型,例如 .docx 文件,因为 tika-parsers 包对于探测器,如上所述here 。那么,我该如何解决这个问题呢?我想使用 tika 进行准确的类型检测,但除了 Tika 之外,我还想使用 Apache POI。

谢谢

最佳答案

我不知道你的 POM 是什么样的,但在大多数情况下,此类问题可以通过排除有问题的传递依赖项来解决。

它看起来像这样:

<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers</artifactId>
    <version>1.7</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
        </exclusion>
    </exclusions> 
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.11</version>
</dependency>

但是,查看 Tika 1.7 的 POM,它已经依赖于 POI 3.11,这是当前最新的版本,并且确实包含所需的方法。因此,很可能您在某个地方有另一个依赖项正在拉入旧版本的 POI。

您可以使用Maven dependency plugin找到有问题的库,并使用上述技巧来解决冲突。

关于java - 简单的 Tika 型探测器和 Apache POI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29737043/

相关文章:

java - 在 FOR 循环中使用大量 IF 语句

java - 在 Java 中使用 XSLT 将 XML 转换为 HTML 字符串

Maven 描述符(META-INF/maven)存档中的重复条目

java - 如何确定异常是否为 ClientAbortException

maven - 使用 Selenium 启动 Firefox

java - Eclipse 启用多重分包

java - 从 Apache Poi 中导出的 Excel 中删除特殊字符和符号

java:比较时间/日期并获得时差的正确格式

java - 执行器服务和巨大的IO

java - 如何在 XWPFTableCell 中插入表格