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>

Надеюсь, этот маленький инструментарий поможет при разработке отчетов.

Предыдущая тема Жизненный цикл отчета
Следующая тема Оформление отчетов

Комментариев: 5

5 Responses to “JasperReports and Ant”

Комментарии:

  1. Alexander

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

Leave a Reply