为什么我从我的代码中得到这个 NoClassDefFoundError?
Why am I getting this NoClassDefFoundError from my code?
我一直在尝试在我的代码中使用 Jar 文件作为库,它编译得很好。但是,在运行时,我不断收到 NoClassDefFoundError
消息。为什么会这样?我已经在编译路径和运行时路径中包含了 Jar 文件。
错误信息如下:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.pdfbox.cos.COSDocument.(COSDocument.java:51)
at org.apache.pdfbox.pdmodel.PDDocument.(PDDocument.java:136)
at processing.PDFToJPG.main(PDFToJPG.java:58)
Caused by: 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 more
这是我的代码:
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 文件,而不是像我一直尝试做的那样编辑类路径
我认为除了您已经包含的罐子之外,您还需要另一个罐子。尝试添加 common-logging 1.4. Apparently, there is a dependency between pdfbox1.8.jar and this jar as stated on their site。
编辑:还有更多依赖项 fontbox 和 jempbox 需要考虑。
EDIT2:我制作了一个包含所有需要的依赖项的 zip,您可以下载它 here。
我同意 Aurelien 的 post:您似乎缺少 Apache Commons Logging - 以及其他运行时依赖项。
您可能需要考虑将项目创建为 'Maven' 项目(Netbeans 非常支持 Maven):然后添加 'pdfbox' 作为 'dependency';这应该会让你的生活更轻松 - 因为 Maven 将获取任何其他所需的依赖项。
您可以从这里获取各种 PDFBox 版本的 'Maven Coordinates':
http://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox
如果您想将最终项目构建到包含所有依赖项的单个 JAR 中;或为它们创建一个单独的 'lib' 目录:您必须对 Maven 项目文件 ('pom.xml') 进行一些小的更改才能执行此操作。
这个 Whosebug Post 有一个这样做的例子。
我一直在尝试在我的代码中使用 Jar 文件作为库,它编译得很好。但是,在运行时,我不断收到 NoClassDefFoundError
消息。为什么会这样?我已经在编译路径和运行时路径中包含了 Jar 文件。
错误信息如下:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at org.apache.pdfbox.cos.COSDocument.(COSDocument.java:51) at org.apache.pdfbox.pdmodel.PDDocument.(PDDocument.java:136) at processing.PDFToJPG.main(PDFToJPG.java:58)
Caused by: 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 more
这是我的代码:
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 文件,而不是像我一直尝试做的那样编辑类路径
我认为除了您已经包含的罐子之外,您还需要另一个罐子。尝试添加 common-logging 1.4. Apparently, there is a dependency between pdfbox1.8.jar and this jar as stated on their site。
编辑:还有更多依赖项 fontbox 和 jempbox 需要考虑。
EDIT2:我制作了一个包含所有需要的依赖项的 zip,您可以下载它 here。
我同意 Aurelien 的 post:您似乎缺少 Apache Commons Logging - 以及其他运行时依赖项。
您可能需要考虑将项目创建为 'Maven' 项目(Netbeans 非常支持 Maven):然后添加 'pdfbox' 作为 'dependency';这应该会让你的生活更轻松 - 因为 Maven 将获取任何其他所需的依赖项。
您可以从这里获取各种 PDFBox 版本的 'Maven Coordinates':
http://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox
如果您想将最终项目构建到包含所有依赖项的单个 JAR 中;或为它们创建一个单独的 'lib' 目录:您必须对 Maven 项目文件 ('pom.xml') 进行一些小的更改才能执行此操作。
这个 Whosebug Post 有一个这样做的例子。