Вы можете скомпилировать шаблон отчета с помощью net.sf.jasperreports.ant.JRAntCompileTask ant задача.
Образец взят из здесь :
<path id="runClasspath">
<pathelement location="${path_to_jasper_libs}"/>
<pathelement path="${path_to_scriplet}\scriplet.jar"/>
</path>
<taskdef name="jrc" classname="net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid="classpath"/>
</taskdef>
<target name="compile1">
<mkdir dir="./build/reports"/>
<jrc
srcdir="./reports"
destdir="./build/reports"
tempdir="./build/reports"
keepjava="true"
xmlvalidation="true">
<classpath refid="runClasspath"/>
<include name="**/*.jrxml"/>
</jrc>
</target>
<target name="compile2">
<mkdir dir="./build/reports"/>
<jrc
destdir="./build/reports"
tempdir="./build/reports"
keepjava="true"
xmlvalidation="true">
<src>
<fileset dir="./reports">
<include name="**/*.jrxml"/>
</fileset>
</src>
<classpath refid="runClasspath"/>
</jrc>
</target>
Цитата с сайта:
В дополнение к атрибутам srcdir и destdir, пользовательский jrc
Задача Ant, поставляемая с JasperReports, поддерживает следующие атрибуты:
компилятор: имя класса, который реализует JRCompiler
интерфейс, который будет использоваться для составления отчетов (необязательно).
xmlvalidation: флаг, указывающий, следует ли проверять XML
выполняется в файлах шаблонов исходного отчета (по умолчанию true).
tempdir: место для хранения временно сгенерированных файлов (
текущий рабочий каталог по умолчанию). keepjava: флаг для
указать, должны ли временные файлы Java, созданные на лету
сохраняется и не удаляется автоматически (по умолчанию false).
Рабочий образец:
SampleJRScriptlet класс:
import com.google.common.base.Strings;
import net.sf.jasperreports.engine.JRDefaultScriptlet;
public class SampleJRScriptlet extends JRDefaultScriptlet {
public String doubleField(String value) {
return Strings.repeat(value, 2);
}
}
Шаблон отчета для компиляции (файл report_with_scriplet.jrxml ):
<jasperReport ... scriptletClass="SampleJRScriptlet">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<queryString language="xPath">
<![CDATA[/Northwind/Customers]]>
</queryString>
<field name="CustomerID" class="java.lang.String">
<fieldDescription><![CDATA[CustomerID]]></fieldDescription>
</field>
<field name="CompanyName" class="java.lang.String">
<fieldDescription><![CDATA[CompanyName]]></fieldDescription>
</field>
<field name="ContactName" class="java.lang.String">
<fieldDescription><![CDATA[ContactName]]></fieldDescription>
</field>
<field name="ContactTitle" class="java.lang.String">
<fieldDescription><![CDATA[ContactTitle]]></fieldDescription>
</field>
<detail>
<band height="20" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$P{REPORT_SCRIPTLET}.doubleField("$F{CustomerID}")]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{CompanyName}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="200" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{ContactName}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="300" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{ContactTitle}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
Мой скрипт муравья (файл compile_report.xml ):
<project default="compile" basedir=".">
<path id="classpath">
<fileset dir="./../../target/alternateLocation">
<include name="jasperreports-4.1.2.jar"/>
<include name="commons-logging-1.0.2.jar"/>
<include name="commons-digester-1.7.jar"/>
<include name="commons-collections-2.1.jar"/>
<include name="commons-beanutils-1.8.0.jar"/>
<include name="groovy-all-1.0-jsr-05.jar"/>
</fileset>
</path>
<path id="runClasspath">
<path refid="classpath"/>
<pathelement path="./../../target/myscriplet.jar"/>
</path>
<taskdef name="jrc" classname="net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid="classpath"/>
</taskdef>
<target name="compile">
<mkdir dir="./compiled_jasper"/>
<jrc
destdir="./compiled_jasper"
tempdir="./compiled_jasper"
keepjava="true"
xmlvalidation="true">
<src>
<fileset dir="./report">
<include name="**/*.jrxml"/>
</fileset>
</src>
<classpath refid="runClasspath"/>
</jrc>
</target>
</project>
Структура папок:
report
report_with_scriplet.jrxml
compile_report.xml
После запуска скрипта структура папок будет:
report
report_with_scriplet.jrxml
compiled_jasper
report_with_scriplet_1323195663885_780040.groovy
report_with_scriplet.jasper
compile_report.xml