2014-07-18 3 views
0

동적 재스퍼 보고서를 만들려고합니다. 그래서 인터넷에서 예제를 사용하여 하나를 만들려고했습니다. 내가 사용하는 코드 아래동적 재스퍼 보고서를 만들 때 NoClassDefFoundError

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:143) at 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

+0

당신은 Apache Common Digester가 필요합니다. http://stackoverflow.com/questions/14729528/java-lang-noclassdeffounderror-when-using-a-third-party : [1] [1] 다른 비슷한 [질문] 참조 -jar-file – David

+0

고맙습니다. jar 파일을 추가합니다. 하지만 작동하지 않습니다. – user3778655

답변

2

commons-digester.jar이 클래스 경로에 누락 된 파일처럼 보인다. Download 그것을 클래스 경로에 추가하십시오.

+0

답변 해 주셔서 감사합니다. commons-digester.jar를 추가했습니다. 그러나 같은 문제가 발생합니다. – user3778655

+0

@ user3778655 프로그램 시작 방법을 보여줄 수 있습니까? – Jens

+0

클래스를 마우스 오른쪽 버튼으로 클릭하고 "java application"으로 실행하십시오. – user3778655