【问题标题】:Bare bones Tika type detector and Apache POI裸骨 Tika 类型检测器和 Apache POI
【发布时间】:2015-06-26 12:55:27
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: java maven apache-poi apache-tika


    【解决方案1】:

    我不知道您的 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 查找有问题的库,并使用上述技巧来解决冲突。

    【讨论】:

    • 是的,你是对的。我尝试在依赖后关闭依赖,发现我有一个旧版依赖,它引入了旧版本的 POI。谢谢。
    猜你喜欢
    • 2019-05-31
    • 2018-04-08
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多