Se come me integrate la libreria di JasperReport nei progetti java e lanciate durante un programma una compilazione del report e poi un fill e avete una macchina dove non è installato il jdk ma solamente un jre, riceverete un errore del genere:

net.sf.jasperreports.engine.JRException: Error compiling report java source files

questo è dato perchè nel jre non è più incluso il tools.jar ! Per ovviare al problema occorre includere nella CLASSPATH del progetto il file jdt-compiler.jar che si trova nella cartella lib di jasperReport !

fonte articolo: http://www.installationwiki.org/JasperReports (Sezione JDT Compiler)

Se ricevete il seguente messaggio:

Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError: com/lowagie/text/pdf/FontMapper
        at net.sf.jasperreports.view.save.JRPdfSaveContributor.save(JRPdfSaveContributor.java:103)
        at net.sf.jasperreports.view.JRViewer.btnSaveActionPerformed(JRViewer.java:1135)
        at net.sf.jasperreports.view.JRViewer$3.actionPerformed(JRViewer.java:675)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.lang.ClassNotFoundException: com.lowagie.text.pdf.FontMapper
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        … 29 more

Vuol dire che nel vostro progetto non avete inglobato la libreria iText che potete trovare al seguente indirizzo web: http://itextpdf.com/ o precisamente http://sourceforge.net/projects/itext/files/

Se usate JasperReport per creare i report (come lo usiamo noi nel nostro programma open-source jMagazzino ) e ottenete il seguente errore:

Exception in thread “report *****” java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester
        at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:146)
        at stampe.jcJasperReport.satmpaReportPoiApriFinestra(jcJasperReport.java:35)
        at stampe.jcStampaReport.stampaDocumento(jcStampaReport.java:176)
        at stampe.jcStampaReport.run(jcStampaReport.java:28)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.digester.Digester
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        … 4 more

vi siete dimenticati di inglobare delle classi che JasperReport richiede, per l’esattezza:

  • commons-beanutils   
  • commons-collections  
  • commons-logging  
  • commons-digester
  • che potete reperire a questo indirizzo:  http://commons.apache.org/

    Per configurare l’invio delle e-mail con il proprio SMTP occorre andare a modificare il file js.quartz.properties nella cartella WEB-INF (se usate la virtual machine fatta da bitnami il file lo trovate in /opt/bitnami/apache-tomcat/webapps/jasperserver/WEB-INF ).

    Ecco un esempio del file:

    # This file is now just a pass-through for stuff in the
    # file referenced by the Maven js.quartz.properties file.

    quartz.delegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate

    quartz.tablePrefix=QRTZ_

    quartz.extraSettings=

    report.scheduler.mail.sender.host=127.0.0.1
    report.scheduler.mail.sender.username=pippo
    report.scheduler.mail.sender.password=password
    report.scheduler.mail.sender.from=report@papiniweb.it
    report.scheduler.mail.sender.protocol=smtp
    report.scheduler.mail.sender.port=25

    report.scheduler.web.deployment.uri=http://localhost:8080/jasperserver-pro