Compilar JasperReports usando Maven
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:- Repositorio plug in: http://mvnrepository.com/artifact/org.codehaus.mojo/jasperreports-maven-plugin
- JasperReport: http://jasperforge.org/projects/jasperreports
Category: Others