使用第三方.jar文件时的java.lang.NoClassDefFoundError

时间:2013-02-06 12:50:16

标签: java noclassdeffounderror

我正在使用NetBeans。我有一个简单的项目,它以花哨的格式打印一些作为参数发送的数据。 这是抛出异常的代码:

        JasperDesign design =  JRXmlLoader.load("Certificate.jrxml");
        JasperReport report = JasperCompileManager.compileReport(design);
        JasperPrint print = JasperFillManager.fillReport(report, new HashMap(), new ClientList(args).getClients());
        JPanel panel= new JRViewer(print);

每当创建Jasper类时,都会抛出这些异常。 我还尝试了System.getProperty(“java.class.path”),它包含了“jasperreports-5.0.1.jar”文件。 我究竟做错了什么?我知道每当一个类在编译时可用时抛出这些异常,但不会在运行时抛出..但jar就在那里!

请求Stacktrace:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester

at certificado.Certificado.main(Certificado.java:31)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.digester.Digester

at java.net.URLClassLoader$1.run(URLClassLoader.java:366)

at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

at java.lang.ClassLoader.loadClass(ClassLoader.java:423)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

at java.lang.ClassLoader.loadClass(ClassLoader.java:356)

... 1 more

Java Result: 1

3 个答案:

答案 0 :(得分:3)

您可能正在编译Jasper jar,但在运行时该jar有自己的依赖项,您也应该包含它们。

根据您的堆栈跟踪,您需要Apache Commons Digester。我可能会使用Maven构建,让Maven(希望)为你解决这组依赖关系。您可以使用Jar search engine来查找这些依赖项,但它们不会为您确定这些jar的匹配版本。

答案 1 :(得分:1)

你的库(Jasper?)似乎对另一个库有(运行时)依赖。 意思是,它在执行时需要一些其他JAR存在于类路径中。

缺少的班级名称为org/apache/commons/digester/Digester。因此,您可以猜测丢失的库是commons-digester。确保Digester库也可用于Classpath。

答案 2 :(得分:0)

我遇到同样的问题,我只是添加 commons-digester-2.0.jar ,问题就解决了。