1

我正在使用 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 就在那里!

请求的堆栈跟踪:

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
4

3 回答 3

3

您可能正在针对 Jasper jar 进行编译,但在运行时该 jar 有其自己的依赖项,您也应该包含这些依赖项。

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

于 2013-02-06T12:54:23.687 回答
1

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

缺少的类名是org/apache/commons/digester/Digester. 因此,您可以猜测缺少的库是commons-digester. 确保 Digester 库在 Classpath 上也可用。

于 2013-02-06T12:57:15.033 回答
0

我面临同样的问题,我只需添加commons-digester-2.0.jar即可解决问题。

于 2014-08-02T04:55:36.827 回答