如何避免得到java.lang.NoClassDefFoundError: org/apache/commons/log



我有一个NetBeans项目,我想在其中设计jasper报告,当我通过 JasperFillManager.fillReport 填写报告时,我发现了一个错误消息。

如何解决这个问题?

我使用了iReport 5.0.0JasperReports库5.1.0

我的代码描述如下

try {
    String reportName = "./rptJobList.jasper";
    InputStream is = new FileInputStream(reportName);
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/js001?user=root&password=admin");
    JasperPrint jasperPrint = JasperFillManager.fillReport(is, null, con);
    JasperViewer jv = new JasperViewer(jasperPrint);
    jv.setVisible(true);
} catch (Exception ex) {
}

例外是:

线程"AWT-EventQueue-0"异常org/apache/commons/logging/LogFactory在net.sf.jasperreports.engine.util.JRLoader。(JRLoader.java: 68)在net.sf.jasperreports.engine.JRPropertiesUtil.loadProperties (JRPropertiesUtil.java: 99)在net.sf.jasperreports.engine.DefaultJasperReportsContext.initProperties (DefaultJasperReportsContext.java: 94)在net.sf.jasperreports.engine.DefaultJasperReportsContext。(DefaultJasperReportsContext.java: 71)在net.sf.jasperreports.engine.DefaultJasperReportsContext。(DefaultJasperReportsContext.java: 59)在net.sf.jasperreports.engine.JasperFillManager.getDefaultInstance (JasperFillManager.java: 85)在net.sf.jasperreports.engine.JasperFillManager.fillReport (JasperFillManager.java: 824)在job.NewClass.jButton2ActionPerformed(NewClass.java:64) atjob.NewClass.access 000美元(NewClass.java: 21)job.NewClass actionperformed (NewClass.java: 42) 1.美元javax.swing.AbstractButton.fireActionPerformed (AbstractButton.java: 1995)在javax.swing.AbstractButton Handler.actionPerformed美元(AbstractButton.java: 2318)在javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java: 387)在javax.swing.DefaultButtonModel.setPressed (DefaultButtonModel.java: 242)在javax.swing.plaf.basic.BasicButtonListener.mouseReleased (BasicButtonListener.java: 236)在java.awt.Component.processMouseEvent(Component.java:6134javax.swing.JComponent.processMouseEvent (JComponent.java: 3265)java.awt.Component.processEvent (Component.java: 5899)java.awt.Container.processEvent (Container.java: 2023)java.awt.Component.dispatchEventImpl (Component.java: 4501)java.awt.Container.dispatchEventImpl (Container.java: 2081)java.awt.Component.dispatchEvent (Component.java: 4331)java.awt.LightweightDispatcher.retargetMouseEvent (Container.java: 4301)在java.awt.LightweightDispatcher.processMouseEvent (Container.java: 3965)java.awt.LightweightDispatcher.dispatchEvent (Container.java: 3895)(Container.java:2067) atjava.awt.Window.dispatchEventImpl (Window.java: 2458)java.awt.Component.dispatchEvent (Component.java: 4331)java.awt.EventQueue.dispatchEvent (EventQueue.java: 599)java.awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread.java: 269)在java.awt.EventDispatchThread.pumpEventsForFilter (EventDispatchThread.java: 184)在java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java: 174)在java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java: 169)在java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java: 161)java.awt.EventDispatchThread.run (EventDispatchThread.java: 122)java.lang.ClassNotFoundException:org.apache.commons.logging.LogFactory在java.net.URLClassLoader 1.美元(URLClassLoader.java: 200)运行java.security.AccessController。特权(本地方法)在java.net.URLClassLoader.findClass (URLClassLoader.java: 188)java.lang.ClassLoader.loadClass (ClassLoader.java: 307)sun.misc.Launcher AppClassLoader.loadClass美元(Launcher.java: 301)java.lang.ClassLoader.loadClass (ClassLoader.java: 252)java.lang.ClassLoader.loadClassInternal (ClassLoader.java: 320)…35

需要将Commons Logging添加到类路径中。如果您在一个普通的Netbeans项目中工作(而不是在Netbeans中的Maven项目中工作),请查看这个SO问题或这篇解释如何向项目添加库的文章。

另一方面,如果你在使用Netbeans的Maven项目上工作,Commons日志记录必须作为依赖项添加。如何做到这一点可以在这里找到-基本上是右键单击项目树中的libraries节点,添加依赖项,输入工件详细信息,或者使用内置的搜索助手在Maven存储库中找到正确的工件。

最新更新