Java 在Eclipse中导入Tika 1.13时出现NoClassDefFoundError

Java 在Eclipse中导入Tika 1.13时出现NoClassDefFoundError,java,eclipse,maven,jar,apache-tika,Java,Eclipse,Maven,Jar,Apache Tika,根据tika指南,我已经完成了以下步骤: 将tika核心和tika解析器依赖项添加到maven项目的pom.xml中 从eclipse运行maven安装以生成tika核心jar和tika解析器jar 将tika核心jar和tika解析器jar添加到我的eclipse项目构建路径中 我在尝试运行tika时遇到了以下运行时异常: Exception in thread "main" java.lang.NoClassDefFoundError: org.apache.pdfbox.pdmodel.

根据tika指南,我已经完成了以下步骤:

  • 将tika核心和tika解析器依赖项添加到maven项目的pom.xml中
  • 从eclipse运行maven安装以生成tika核心jar和tika解析器jar
  • 将tika核心jar和tika解析器jar添加到我的eclipse项目构建路径中
  • 我在尝试运行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>
    
    
    org.apache.tika
    提卡岩芯
    1.13
    org.apache.tika
    提卡解析器
    1.13
    
    问题在于,如果您在构建路径中手动添加tika core和tika解析器JAR,您将不会拥有在它们自己的POM中列出的可传递依赖项

    因此,我建议:

  • 删除您自己构建的tika core和tika解析器版本。相反,您应该依赖于central上提供的版本。这将确保构建项目的另一个jar将获得相同的jar(而不是本地构建的jar)
  • 你有两个选择
  • (选项A,使用Maven)不要手动将JAR添加到Eclipse构建路径中。依赖Eclipse的内置Maven插件(例如m2e),或者使用Maven的Eclipse插件(调用mvn Eclipse:Eclipse来更新.classpath和.project)


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

    问题是,如果您在构建路径中手动添加tika core和tika解析器JAR,您将不会拥有在其自身pom中列出的可传递依赖项

    因此,我建议:

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


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

    但是jar文件在运行时是否在类路径中?(可能会提到:您是从eclipse内部还是外部(使用java-jar…)运行tika?)为什么要为tika core和解析器调用mvn install?它们在repo上可用,因此您不必构建它们。在将两个JAR添加到构建路径后,我在eclipse中运行tika,就像tika说明中所示。在构建JAR的项目中,我确实看到了pdfbox包,其中包含所需的InvalidPasswordException类,但是jar文件在运行时是否在类路径中?(请注意:您是从eclipse内部还是外部(使用java-jar…)运行tika?)为什么要为tika core和解析器调用mvn install?它们可以在repo上使用,因此您不必构建它们。在将两个JAR添加到构建路径后,我在eclipse中运行tika,如tika说明所示。在构建JAR的项目中,我确实看到了pdfbox包,其中包含所需的InvalidPasswordException classHi,选项2对我不可用,因为我无法在此项目上使用Maven。我使用了选项1(从Maven中央存储库下载了相应的jars-core和-parser)同样的问题依然存在。我如何构建JAR以包含所有必要的库?如果没有Maven option addedHi,我就无法使用选项2,因为我无法在这个项目上使用Maven。我使用了选项1(从Maven中央存储库下载了适当的JAR-core和-parser)同样的问题依然存在。我如何构建JAR以包含所有必要的库?没有添加Maven选项