JasperReports Maven Plugin
Introducción
JasperReports
Maven Plugin es un plugin de Maven
que nos permite compilar nuestros informes JasperReports.
El proceso de compilación de dichos informes JRXML nos generará
sus correspondientes informes compilados JASPER.
En este tutorial vamos a ver los entresijos de este plugin
tan interesante y vamos a finalizar con un ejemplo práctico muy sencillo
para comprobar su funcionamiento.
Requisitos
Para poder usar JasperReports Maven Plugin necesitamos
tener instalado en nuestra máquina:
- Maven 2.
- JDK 1.4 o superior.
Configuración
Para empezar a usar este plugin en nuestra aplicación
tenemos que irnos al fichero pom.xml de la misma y
hacer una serie de modificaciones que definan que versión del plugin
vamos a utilizar y algunas otras configuraciones…
...... org.codehaus.mojo jasperreports-maven-plugin 1.0-beta-1 org.codehaus.mojo jasperreports-maven-plugin compile-reports compile jasperreports jasperreports 3.0.0
Como se puede ver, la versión del plugin que vamos a utilizar
es la 1.0-beta1 (versión más actual), lo que
nos dice que es un proyecto muy joven. El plugin anteriormente configurado
se ejecutará en la fase de compilación. Si no se especifica
ningún parámetro de configuración cogerán, por
defecto, los informes JRXML del path src/main/jasperreports
y dejará sus correspondientes ficheros compilados JASPER en
target/classes.
El goal principal del plugin es jasperreports:compile-reports.
Dicho goal tiene varios parámetros de configuración
interesantes lo cuales podemos ver en detalle en http://mojo.codehaus.org/jasperreports-maven-plugin/compile-reports-mojo.html
Una vez visto la configuración del plugin en nuestro proyecto
y la configuración del propio plugin vamos a hacer un sencillo
ejemplo de uso para ver su funcionamiento.
Ejemplo
Tenemos un sencillo proyecto Maven 2 en el que tenemos diseñados dos
informes JasperReports (JRXML) situados en el path
src/main/resources/reports.
Y queremos compilarlos dentro de la fase de compilación de nuestro
proyecto dejando sus ficheros compilados JASPER en el path
src/main/resources/reportsCompiled.
Para todo esto tenemos que modificar el pom.xml
de nuestro proyecto. Aquí
os lo dejo.
4.0.0 tutorial tutorial jar 1.0-SNAPSHOT tutorial http://maven.apache.org jasperreports jasperreports 3.0.0 org.codehaus.mojo jasperreports-maven-plugin 1.0-beta-1 org.codehaus.mojo jasperreports-maven-plugin D:\\tutorial\\src\\main\\resources\\reports D:\\tutorial\\src\\main\\resources\\reportsCompiled compile-reports compile jasperreports jasperreports 3.0.0
Una vez modificado el pom.xml vamos a probarlo…
Ahora nos vamos al path donde deberían estar nuestros ficheros
JASPER y…….
¡¡¡ Perfecto !!! Ya tenemos nuestros informes JasperReports
compilados y preparados para ser usados por nuestra aplicación.
Conclusión
Como todos los plugins de Maven, surgen para facilitarnos aun más
las cosas a la hora de compilar, empaquetar, etc. Este plugin en
concreto nos proporciona la capacidad de poder incorporar la compilación
de los informes de un proyecto dentro de la fase de compilación de
este evitando tener que compilarlos en tiempo de ejecución o en otro
momento.
Nosotros desde Autentia llevamos tiempo
trabajando con Maven y gracias a la gran cantidad de plugins interesantes
que le surgen alrededor nos damos cuenta día a día que Maven
se está convirtiendo en una herramienta muy potente e imprescindible
en todos nuestros proyectos.
Muy buen tutorial¡¡¡Me ha funcionado perfectamente todo.
Ahora yo quiero rellenar el .jasper con el siguiente codigo:
JasperReport masterReport = (JasperReport) JRLoader.loadObject(\\\»URL del fichero .jasper\\\»);
JasperPrint jasperPrint = JasperFillManager.fillReport(masterReport, param, (Connection) null);
JasperExportManager.exportReportToPdf(jasperPrint);
Me da el siguiente error:
net.sf.jasperreports.engine.JRException: Error loading object from file : /opt/apache-tomcat-5.5.12/webapps/raeell/WEB-INF/classes/reports/compilados/formularioInsc.jasper
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:92)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:64)
at org.ja.cgob.raeell.escritorio.agenda.actions.GenerarReportAgendaAction.generarReport(GenerarReportAgendaAction.java:131)
at org.ja.cgob.raeell.escritorio.agenda.actions.GenerarReportAgendaAction.verPDF(GenerarReportAgendaAction.java:195)
at org.ja.cgob.raeell.escritorio.agenda.actions.GenerarReportAgendaAction.execute(GenerarReportAgendaAction.java:63)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:744)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:674)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.io.InvalidClassException: java.util.ArrayList; local class incompatible: stream classdesc serialVersionUID = 8664875232659988799, local class serialVersionUID = 8683452581122892189
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:88)
… 29 more
El report contiene a su vez subreport, esto puede influir en algo?
Saludos y gracias por adelantado