Compilar JasperReports usando Maven

Compilar JasperReports usando Maven

| October 25, 2011 | 0 Comments

Es muy común en el desarrollo de un proyecto software que tengaís que mostrar información mediante un sistema de reports. Para ello existen múltiples motores de informes y uno de ellos es JasperReport.

Este post no pretende explicar detalles de la integración de JasperReport dentro de una aplicación J2EE. El objetivo es encontrar una solución para mover el proceso de compilación de los reports desde el momento de ejecución de la aplicación a la fase de compilación de la misma.

JRXML fichero => se compila => fichero Jasper => se ejecuta el report

Imagina que has diseñado un report con Ireport, por lo que tu tienes de partida un fichero con extensión jrxml. Cuando vas a usar este fichero dentro de una aplicación Java tienes dos opciones:

1.Compilar el  report en tiempo de ejecución, luego en tu código Java tendrás algo como lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Obtenemos el report
 
nombreReport = nombreReport+".jrxml";
 
InputStream reportStream = this.getClass().getResourceAsStream("/reports/"+nombreReport);
 
// Creamos un objeto JasperDesign desde el fichero JRXML
 
JasperDesign jd = JRXmlLoader.load(reportStream);
 
// Compilamos el report
 
JasperReport jr = JasperCompileManager.compileReport(jd);
 
// Creamos el objeto printer para mostrar el report
 
JasperPrint jp = JasperFillManager.fillReport(jr, params, dataSource);

2.Compilar cada report de forma separada usando por ejemplo IRreport, por lo que desde el código Java tendrás que:

1
2
3
4
5
6
7
8
9
10
11
// Obtener el fichero jasper directamente.
 
nombreReport = nombreReport+".jasper";
 
InputStream reportStream = this.getClass().getResourceAsStream("/reportsCompiled/"+nombreReport);
 
JasperReport jr = (JasperReport) JRLoader.loadObject(reportStream);
 
// Creamos el objeto printer para mostrar el report
JasperPrint jp = JasperFillManager.fillReport(jr, params, dat
aSource);

La segunda opción es mucho más potente además de mejorar el rendiemiento porque en tiempo de ejecución no se existe la fase de compilación de los reports. Obviamente, si un requisito de tu aplicación es que los ficheros jrxml tienen que soportar cambios en caliente, esta segunda opción no sería viable.

Pero, que ocurre cuando tienes un número elevado de ficheros jrxml? ¿Compilamos los reports uno a uno? Si quieres puedes compilar todos los reports a la vez de forma automática, puedes hacer durante la fase de compilación de maven. Para ello, se puede usar un plug in de maven, incluyendo este fragmento en tu fichero pom.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
	          org.codehaus.mojo
	          jasperreports-maven-plugin
	          1.0-beta-2  
 
        		org.codehaus.mojo
          		jasperreports-maven-plugin  
 
            		//dirReports//reports
            		//dirReports//reportsCompiled  
 
                compile-reports  
 
              compile  
 
              	net.sf.jasperreports
    			jasperreports
    			3.7.6
    			jar
 
				log4j
				log4j
				1.2.16

La versión de la dependencia de jaspereport que requiere el plug in dependerá de la versión que useis en vuestro projecto. Existen dos directorios que pueden ser configurados de forma opcional:

  • //dirReports//reports : directorio donde estarán los ficheros jrxml.
  • //dirReports//reportsCompiled : directorio donde se ubicarán los ficheros jasper que el plug in genera.

De esta forma, cuando compiles tu projecto usando maven, los ficheros jasper seran compilados a partir de los ficheros jrxml. Notar que si cambias algun fichero jrxml, vas a tener que recompilar nuevamente el proyecto.

————————————————————————————————————————————————–

Fuentes de información: