我正在尝试使用ant编译jrxml。我在iReports上创建了我的jrxml,所以我没有build.xml。当运行ant命令时,它要求生成build.xml。我创建了这个文件在相同的表作为我的jrxml,但我不知道我应该把我的jrxml链接到我的scriptlet jar。我很感激你的帮助,我有点迷路了。
您可以在net.sf.jasperreports.ant的帮助下编译报表模板。JRAntCompileTask ant task.
从这里取的样本:
<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自定义随JasperReports一起发布的Ant任务支持以下属性:
compiler:实现JRCompiler的类名用于编译报告的接口(可选)。 xmlvalidation:指示是否应该进行XML验证的标志对源报表模板文件执行(默认为true)。 tempdir:存储临时生成的文件的位置当前工作目录(默认)。 keepjava: Flag to指示是否应该使用动态生成的临时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_scripplet)。然后在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>
我的ant脚本(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