在Eclipse中导入Tika 1.13时出现NoClassDefFoundError

时间:2016-08-22 13:48:29

标签: java eclipse maven jar apache-tika

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

  1. 将tika-core和tika-parser依赖项添加到maven项目的pom.xml中
    1. 从eclipse运行maven install以生成tika-core jar和tika-parser jar
    2. 将tika-core jar和tika-parser jar添加到我的eclipse项目构建路径
  2. 我在尝试运行tika时遇到了这个运行时异常:

    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>
    

1 个答案:

答案 0 :(得分:4)

问题在于,如果在构建路径中手动添加tika-core和tika-parsers jar,则不会在自己的POM中列出传递依赖项。

所以我建议:

  1. 删除您自己构建的tika-core和tika-parsers版本。相反,你应该依赖中心可用的版本。这将确保构建项目的另一个将获得相同的jar(而不是本地构建的)
  2. 您有两个选择
  3. (选项A,使用Maven)不要手动添加到Eclipse构建路径中的jar。依赖于Eclipse的内置Maven插件(例如m2e)或者使用Eclipse插件作为maven(调用mvn eclipse:eclipse来更新.classpath和.project)。

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