Utilizzare Jasper Reports – Integrazione con Maven

Utilizzare Jasper ReportNell’ultimo appuntamento abbiamo visto come preparare un ambiente di lavoro adatto allo sviluppo dei report, siamo quindi pronti per passare ad argomenti più impegnativi. In questa lezione vediamo come generare dei report direttamente dai nostri programmi scritti in Java, senza dover quindi passare da iReport.

Set-up del progetto

Per comodità utilizzeremo Maven come sistema di build, questo ci permetterà di creare al volo un progetto Java con tutte le directory necessarie e di includere la libreria Jasper Reports senza perderci troppo tempo. Purtroppo Maven è un sistema piuttosto complesso, per chi non l’avesse installato consigliamo di seguire il tutorial che si trova sul sito ufficiale: Maven in 5 Minutes.

Una volta installato Maven possiamo creare lo scheletro del nostro progetto, eseguendo il goal:

mvn archetype:generate -DgroupId=it.artera.jr -DartifactId=jasper-tutorial -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Attenzione: il comando deve essere digitato tutto sulla stessa linea! Eventualmente copiatelo in un editor, eliminate i fine-linea e incollate la stringa di comando sulla vostra console.

Verrà creata una directory jasper-tutorial con questi contenuti:

<ul>
    <li><em>pom.xml</em> :  il cosiddetto <em>project descriptor</em>, che ha la stessa funzione dei vecchi <em>makefile</em>;</li>
    <li><em>src/main/java</em> : sorgenti dell'applicazione;</li>
    <li><em>src/test/java</em> : test JUnit;</li>
</ul>

Aggiungiamo quindi la directory src/main/jasperreports, dove salveremo i sorgenti dei report. Tenerli in una directory separata ci permette di usare una caratteristica molto apprezzata di Jasper Reports, ovvero di poter compilare i report durante la fase di build del progetto; ciò ovviamente evita di dover compilare a mano tutti i report tramite iReport, automatizzando il processo. Molto comodo!

Per sfruttare questa caratteristica dobbiamo:

<ul>
    <li>aggiungere Jasper Reports come <em>dependency</em> del progetto, in modo che Maven possa scaricare tutti i jar necessari;</li>
    <li>indicare a Maven che vogliamo usare il plugin <em><a title="Jasper Reports Maven Plugin" href="http://mojo.codehaus.org/jasperreports-maven-plugin/" target="_blank">jasperreports-maven-plugin</a></em>;</li>
    <li>specificare la configurazione del plugin stesso.</li>
</ul>

Ecco il file pom.xml dopo le dovute modifiche:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>it.artera.jr</groupId>
  <artifactId>jasper-tutorial</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>jasper-tutorial</name>
  <url>http://maven.apache.org</url>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jasperreports-maven-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>compile-reports</goal>
            </goals>
          </execution>
        </executions>
        <dependencies>
<!--note this must be repeated here to pick up correct xml validation -->
          <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>${jasperreports.version}</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>

  <repositories>
    <repository>
      <id>jasperreports</id>
      <url>http://jasperreports.sourceforge.net/maven2</url>
    </repository>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>net.sf.jasperreports</groupId>
      <artifactId>jasperreports</artifactId>
      <version>${jasperreports.version}</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <properties>
    <jasperreports.version>3.7.2</jasperreports.version>
  </properties>

</project>

Una volta preparato il tutto, consigliamo di eseguire un commit sul proprio sistema di versioning dei sorgenti prima di eseguire il comando:

mvn package

che esegue un build completo. Durante il primo di questi build Maven scaricherà parecchie librerie per cui ci potrebbe mettere anche parecchi minuti a seconda del tipo di connessione, ma quelli successivi saranno sicuramente più veloci. È possibile generare anche i file di progetto per Eclipse:

mvn eclipse:eclipse

Mentre Netbeans, che ha il supporto nativo per Maven, non ha bisogno di alcuna configurazione.

Un report di test

Apriamo iReport e creiamo un report in questo modo:

  • modello: Simple Blue;
  • salviamolo in src/main/jasperreports/testReport.jrxml;
  • selezioniamo la sorgente dati vuota;
  • terminiamo il wizard.

A questo punto ci verrà mostrato un report vuoto.

  • dalla finestra Report inspector clicchiamo con il tasto destro su Campi e aggiungiamone uno, chiamandolo name;
  • aggiungiamo un Campo di testo nella banda denominata Detail 1, inserendo questa espressione: $F{name}
  • nella finestra Proprietà impostiamo Lingua da Groovy a Java.

Una volta salvato il report sarà possibile compilarlo automaticamente con l’aiuto degli strumenti visti nel paragrafo precedente, con il comando:

mvn package

Maven utilizza la directory target come destinazione dei build, e se guardiamo in target/classes troveremo il report compilato.

Sviluppi

Nel prossimo articolo vedremo finalmente come invocare l’esecuzione dei report direttamente da Java!

Linkografia