JasperReports and Ant
Рубрика: JasperReports | 16 March 2007, 18:33 | juriy
В этой заметке я расскажу о том, как можно использовать Ant для автоматизации некоторых задач, связанных с разработкой Jasper отчетов.
Ant и JasperReports
Будем считать, что Ant уже установлен. Если не установлен – быстрее качайте http://ant.apache.org/bindownload.cgi, читайте инструкции по установке и устанавливайте!
В библиотеке JasperReports есть две маленьких, но очень полезных утилиты, которые позволяют просматривать отчет на любом этапе его жизненного цикла, не экспортируя, к примеру, в PDF. Исполняемые файлы утилит – net.sf.jasperreports.view.JasperDesignViewer и net.sf.jasperreports.view.JasperViewer.
Первая утилита, как и следует из названия, предназначена для просмотра шаблонов – как XML шаблона, так и бинарного .jasper шаблона. Вторая утилита позволяет просматривать отчеты формата .jrprint (уже заполненные данными отчеты).
Первая “оптимизация” заключается в том, что мы создадим target для Ant’а, который будет автоматически запускать утилиту для просмотра разрабатываемого XML отчета.
<project name="Jasper Utils" default="viewXML" basedir=".">
<property name="file.name" value="reports/simple.xml"/>
<property name="jasper.dir" value="C:/apps/jasperreports-1.3.1"/>
<property name="classes.dir" value="${jasper.dir}/build/classes"/>
<property name="lib.dir" value="${jasper.dir}/lib"/>
<path id="classpath">
<pathelement location="./"/>
<pathelement location="${classes.dir}"/>
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="viewXML">
<java classname="net.sf.jasperreports.view.JasperDesignViewer" fork="true">
<arg value="-XML"/>
<arg value="-F${file.name}"/>
<classpath refid="classpath"/>
</java>
</target>
</project>
Параметр ${file.name} – это путь к файлу, который необходимо просмотреть.
Все что делает скрипт – это собирает воедино все библиотеки, которые нужны для работы JasperDesignViewer и запускает программу с двумя параметрами:
-XML – указывает на то, что мы будем просматривать еще нескомпилированный отчет.
-Fпуть_к_файлу – путь к шаблону, который нужно просмотреть.
Запустите скрипт и убедитесь, что он работает.
Чтобы “натравить” просмотрщик на скомпилированный отчет – достаточно убрать параметр -XML из опций запуска JasperDesignViewer. Новый target будет выглядеть так:
<target name="viewCompiled">
<java classname="net.sf.jasperreports.view.JasperDesignViewer" fork="true">
<arg value="-F${file.name}"/>
<classpath refid="classpath"/>
</java>
</target>
Target для просмотра заполненных данными отчетов не слишком сильно отличается от двух предыдущих:
<target name="viewFilled">
<java classname="net.sf.jasperreports.view.JasperViewer" fork="true">
<arg value="-F${file.name}"/>
<classpath refid="classpath"/>
</java>
</target>
Компиляцию отчетов тоже можно автоматизировать. Разработчики библиотеки поставляют специальный task для Ant’а – net.sf.jasperreports.ant.JRAntCompileTask. Task называется jrc, и его синтаксис очень напоминает синтаксис javac:
<target name="compile" >
<taskdef name="jrc" classname="net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid="classpath"/>
</taskdef>
<jrc destdir=".">
<src>
<fileset dir=".">
<include name="**/*.xml"/>
</fileset>
</src>
<classpath refid="classpath"/>
</jrc>
</target>
Этот target позволяет скомпилировать все шаблоны в директории reports.
Вот что получится, если собрать все task’и в одном проекте:
<project name="Jasper Utils" default="viewXML" basedir=".">
<property name="file.name" value="reports/simple.xml"/>
<property name="jasper.dir" value="C:/apps/jasperreports-1.3.1"/>
<property name="classes.dir" value="${jasper.dir}/build/classes"/>
<property name="lib.dir" value="${jasper.dir}/lib"/>
<path id="classpath">
<pathelement location="./"/>
<pathelement location="${classes.dir}"/>
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="viewXML">
<java classname="net.sf.jasperreports.view.JasperDesignViewer" fork="true">
<arg value="-XML"/>
<arg value="-F${file.name}"/>
<classpath refid="classpath"/>
</java>
</target>
<target name="viewCompiled">
<java classname="net.sf.jasperreports.view.JasperDesignViewer" fork="true">
<arg value="-F${file.name}"/>
<classpath refid="classpath"/>
</java>
</target>
<target name="viewFilled">
<java classname="net.sf.jasperreports.view.JasperViewer" fork="true">
<arg value="-F${file.name}"/>
<classpath refid="classpath"/>
</java>
</target>
<target name="compile" >
<taskdef name="jrc" classname="net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid="classpath"/>
</taskdef>
<jrc destdir="reports">
<src>
<fileset dir=".">
<include name="reports/*.xml"/>
</fileset>
</src>
<classpath refid="classpath"/>
</jrc>
</target>
</project>
Надеюсь, этот маленький инструментарий поможет при разработке отчетов.
Предыдущая тема Жизненный цикл отчета
Следующая тема Оформление отчетов

Пригодилось. Спасибо.