我在编译期间遇到错误。我正在使用Eclipse IDE&在Ubuntu上工作。我在构建路径中添加了以下jar文件1)pdfbox 1.8.13&所有依赖项2)Commons-logging-1.2。
请告诉我为什么课程在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)
答案 0 :(得分:1)
通过执行以下更改解决了我的查询
1)也将pdfbox的jar文件放在hadoop lib文件夹中。(在运行时将库jar提供给hadoop)。
2)重启hadoop集群。
或者
1)确保您的pdfbox库可以通过将其置于分布式缓存中来使用。
答案 1 :(得分:0)
你有构建路径上的类,所以它编译,但显然你没有在运行二进制文件的类路径中,这就是它不运行的原因。确保您的应用程序的类路径包含您添加的所有JAR(或使用某些构建系统,如Maven或Gradle为您自动化)。