我一直在尝试在我的代码中使用Jar文件作为库,它编译得很好。但是,在运行时,我不断收到NoClassDefFoundError
消息。为什么会这样?我已将Jar文件包含在编译路径和运行时路径中。
以下是错误消息:
线程中的异常" main" java.lang.NoClassDefFoundError:org / apache / commons / logging / LogFactory 在org.apache.pdfbox.cos.COSDocument。(COSDocument.java:51) 在org.apache.pdfbox.pdmodel.PDDocument。(PDDocument.java:136) 在processing.PDFToJPG.main(PDFToJPG.java:58)
引起:java.lang.ClassNotFoundException:org.apache.commons.logging.LogFactory at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ......还有3个
这是我的代码:
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
public static void main(String[] args) {
try {
PDDocument doc = new PDDocument();
} catch (Exception e) {
e.printStackTrace();
}
}
我正在使用NetBeans IDE以及Windows 10
这是我对编译类路径的设置:
[
这是我对运行时类路径的设置:
[
编辑:谢谢你的帮助,它确实奏效了。我需要做的就是下载依赖项Jar文件,而不是像我一直试图做的那样编辑类路径答案 0 :(得分:3)
我认为你需要另外一个罐子,除了你已经包括的罐子。尝试添加common-logging 1.4。显然,pdfbox1.8.jar和这个jar之间存在依赖关系,如site所述。
编辑:还有更多依赖项fontbox和jempbox也可以考虑。
EDIT2:我制作了一个包含所有依赖项的zip文件,您可以将其下载here。
答案 1 :(得分:1)
我同意Aurelien的帖子:看起来你缺少Apache Commons Logging - 以及其他运行时依赖项。
您可能需要考虑将项目创建为“Maven”项目(并且Netbeans非常支持Maven):然后将“pdfbox”添加为“依赖项”;这应该让你的生活更轻松 - 因为Maven会获取任何其他必需的依赖项。
您可以从此处获取各种PDFBox版本的“Maven坐标”:
http://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox
如果要将最终项目构建到包含所有deps的单个JAR中;或者为它们创建一个单独的“lib”目录:您必须对Maven项目文件('pom.xml')进行一些小的更改才能执行此操作。
这个Stackoverflow Post就是这样做的一个例子。