为什么我从代码中获取此NoClassDefFoundError?

时间:2015-12-16 20:24:41

标签: noclassdeffounderror

我一直在尝试在我的代码中使用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

这是我对编译类路径的设置:

[This is my setting for compile classpath[1]

这是我对运行时类路径的设置:

[This is my setting for runtime classpath[2]

编辑:谢谢你的帮助,它确实奏效了。我需要做的就是下载依赖项Jar文件,而不是像我一直试图做的那样编辑类路径

2 个答案:

答案 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就是这样做的一个例子。