Java ClassNotFoundException:org.apache.pdfbox.pdmodel.PDDocument

Java ClassNotFoundException:org.apache.pdfbox.pdmodel.PDDocument,java,eclipse,hadoop,Java,Eclipse,Hadoop,我在编译过程中遇到以下错误。我正在使用EclipseIDE&在Ubuntu上工作。我在构建路径1)pdfbox 1.8.13及其所有依赖项2)Commons-logging-1.2中添加了以下jar文件 请让我知道当类在jar文件中时为什么会出现错误 Error: java.lang.ClassNotFoundException: org.apache.pdfbox.pdmodel.PDDocument at java.net.URLClassLoader$1.run(URLClassLoade

我在编译过程中遇到以下错误。我正在使用EclipseIDE&在Ubuntu上工作。我在构建路径1)pdfbox 1.8.13及其所有依赖项2)Commons-logging-1.2中添加了以下jar文件

请让我知道当类在jar文件中时为什么会出现错误

Error: java.lang.ClassNotFoundException: org.apache.pdfbox.pdmodel.PDDocument
at java.net.URLClassLoader$1.run(URLClassLoader.java:359)
at java.net.URLClassLoader$1.run(URLClassLoader.java:348)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:347)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:312)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at com.hadoopexpert.PdfRecordReader.initialize(PdfRecordReader.java:41)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:521)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:421)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
at org.apache.hadoop.mapred.Child.main(Child.java:249)

类位于构建路径上,因此它可以编译,但显然在运行的二进制文件的类路径中没有它,这就是它不运行的原因。确保您的应用程序的类路径包含您添加的所有JAR(或使用一些构建系统,如Maven或Gradle,为您实现自动化)。

我的查询通过执行以下更改得到解决

1) 将pdfbox的jar文件也放在hadoop lib文件夹中(使库jar在运行时可供hadoop使用)

2) 重新启动hadoop集群

1) 通过将pdfbox库放在分布式缓存中,确保它对hadoop可用


谢谢您提供的信息。我正在使用EclipseIDE&在特定项目的java构建路径中使用JAR。Piotr写道:“但显然,运行二进制文件的类路径中没有它。”。我自己不使用eclipse,但我经常听说构建不会运行。请参阅与问题无关的内容-如果您刚开始使用PDFBox,请使用2.0.8而不是1.8版本。