我正在使用 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/