创建动态jasper报告时出现NoClassDefFoundError

时间:2014-07-18 07:07:37

标签: java noclassdeffounderror

我正在尝试创建一个动态的jasper报告。所以我尝试在互联网上使用一个例子创建一个。但是当我运行该程序时,我得到一个例外:

  

线程“main”中的异常java.lang.NoClassDefFoundError:   org / apache / commons / digester / Digester at   net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:143)     在com.tfc.cheque.handle.ui.ReportPrint.main(ReportPrint.java:31)

以下是我使用的代码:

public class ReportPrint {

public static void main(String[] args) throws JRException, IOException {

    JasperReport jasperReport = JasperCompileManager.compileReport("data.xml");
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,new HashMap(), new JREmptyDataSource());
    JasperExportManager.exportReportToPdfFile(jasperPrint, "sample.pdf");

  }

public ReportPrint(){

    try {
        DynamicReportBuilder dynamicReportBuilder = new DynamicReportBuilder();

        // configure report-level settings
        dynamicReportBuilder.setReportName("Some");

        dynamicReportBuilder.setPageSizeAndOrientation(Page.Page_Letter_Landscape());

        // add id column to the report
        ColumnBuilder columnBuilderID = ColumnBuilder.getNew();

        columnBuilderID.setTitle("ID");
        columnBuilderID.setWidth(180);
        columnBuilderID.setFixedWidth(true);
        columnBuilderID.setColumnProperty("ID", Integer.class.getName(), "@id");

        dynamicReportBuilder.addColumn(columnBuilderID.build());

        // add name column to report
        ColumnBuilder columnBuilderName = ColumnBuilder.getNew();

        columnBuilderName.setTitle("Name");
        columnBuilderName.setWidth(180);
        columnBuilderName.setFixedWidth(true);
        columnBuilderName.setColumnProperty("Name", String.class.getName(), "@name");

        dynamicReportBuilder.addColumn(columnBuilderName.build());

        // add email column to report
        ColumnBuilder columnBuilderEmail = ColumnBuilder.getNew();

        columnBuilderEmail.setTitle("Email");
        columnBuilderEmail.setWidth(180);
        columnBuilderEmail.setFixedWidth(true);
        columnBuilderEmail.setColumnProperty("Email", String.class.getName(),   "@email");

        dynamicReportBuilder.addColumn(columnBuilderEmail.build());

        // add salary column to report
        ColumnBuilder columnBuilderSalary = ColumnBuilder.getNew();

        columnBuilderSalary.setTitle("Salary");
        columnBuilderSalary.setWidth(180);
        columnBuilderSalary.setFixedWidth(true);
        columnBuilderSalary.setColumnProperty("Salary", Integer.class.getName(), "@salary");

        dynamicReportBuilder.addColumn(columnBuilderSalary.build());

        DynamicReport dynamicReport = dynamicReportBuilder.build();

        // build a datasource representing the XML file
        JRDataSource dataSource = new JRXmlDataSource(new File("data.xml"), "//employee");

        // build JasperPrint instance, filling the report with data from datasource created above
        JasperPrint jasperPrint = DynamicJasperHelper.generateJasperPrint(
            dynamicReport, new ClassicLayoutManager(), dataSource, new HashMap<String, Object>());

        // export to the pdf
        String pdfFile = Math.round(Math.random() * 100000) + ".pdf";

        JRExporter exporter = new JRPdfExporter();

        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, pdfFile);

        exporter.exportReport();

    } catch(JRException e) {
        e.printStackTrace();
    }

  }

}

我无法在这里弄清楚问题。请帮忙。谢谢。

以下是我的课程路径设置的屏幕截图:

Class path screen shot

1 个答案:

答案 0 :(得分:2)

看起来类路径中缺少文件commons-digester.jarDownload并将其添加到类路径中。