在 Eclipse 中导入 Tika 1.13 时出现 NoClassDefFoundError

NoClassDefFoundError when importing Tika 1.13 in Eclipse

我已经按照 tika 指南完成了以下步骤:

  1. 在maven项目的pom.xml中添加tika-core和tika-parser依赖
    1. 运行 从 eclipse 安装 maven 以生成 tika-core jar 和 tika-parser jar
    2. 将 tika-core jar 和 tika-parser jar 添加到我的 eclipse 项目构建路径

我在尝试 运行 tika 时得到这个 运行time 异常:

Exception in thread "main" java.lang.NoClassDefFoundError: org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException
    at com.ibm.hrl.ace.pdftotext.TikaExtracter.parse(TikaExtracter.java:33)
    at com.ibm.hrl.ace.pdftotext.Main.AllPdfsToText(Main.java:116)
    at com.ibm.hrl.ace.pdftotext.Main.main(Main.java:34)
Caused by: java.lang.ClassNotFoundException: org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:600)
    at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:786)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:760)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:326)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:741)
    ... 3 more

据我所知,当我使用 Maven 构建 jar 时,它确实正确地添加了 pdfbox...来自构建日志:

[INFO] Including org.apache.pdfbox:pdfbox:jar:2.0.1 in the shaded jar.
[INFO] Including org.apache.pdfbox:fontbox:jar:2.0.1 in the shaded jar.
[INFO] Including org.apache.pdfbox:pdfbox-tools:jar:2.0.1 in the shaded jar.
[INFO] Including org.apache.pdfbox:pdfbox-debugger:jar:2.0.1 in the shaded jar.
[INFO] Including org.apache.pdfbox:jempbox:jar:1.8.12 in the shaded jar.

这是我的 Maven 依赖项:

  <dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.tika/tika-core -->
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>1.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tika/tika-parsers -->
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers</artifactId>
    <version>1.13</version>
</dependency>
  </dependencies>

问题是,如果您在构建路径中手动添加 tika-core 和 tika-parsers jar,您将不会拥有在它们自己的 POM 中列出的传递依赖项。

所以我建议:

  1. 删除您自己构建的 tika-core 和 tika-parsers 版本。相反,您应该依赖中央可用的版本。这将确保构建您的项目的另一个人将获得相同的 jar(而不是本地构建的)
  2. 你有两个选择

(选项 A,使用 Maven)不要手动将 jars 添加到 Eclipse 构建路径中。依赖或内置 Eclipse 的 Maven 插件(例如 m2e)或使用 Eclipse 的 Maven 插件(调用 mvn eclipse:eclipse 更新 .classpath 和 .project)。

(选项 B,没有 Maven)如果你不能在你的项目中使用 Maven,你将不得不添加不仅是 tika-parsers 和 tika-core jar,还有这些项目所需的所有(大部分)传递依赖(包括例如每种格式的特定库 [Office 的 POI,PDF 的 pdfbox ...)。您可以通过在包含 tika-parsers 的 pom 的文件夹中键入 mvn dependency:list 来获取依赖项列表。