使用ant编译带有sciptlet的jrxml

时间:2011-12-06 13:36:54

标签: java ant jasper-reports ireport scriptlet

我正在尝试使用ant编译jrxml。 我在iReports上创建了我的jrxml,所以我没有build.xml。 运行ant命令时,它会要求build.xml。 我在与jrxml相同的库中创建了这个文件,但是我不知道应该把它放到哪个链接我的jrxml到我的scriptlet jar。 我会帮助你,我有点失落......

1 个答案:

答案 0 :(得分:1)

您可以借助 net.sf.jasperreports.ant.JRAntCompileTask ant任务编译报告模板。

取自here的样本:

<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任务支持以下属性:   

  • 编译器:实现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>
    

    我的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
    

    运行后的sript文件夹结构将是:

    report
      report_with_scriplet.jrxml
    compiled_jasper
      report_with_scriplet_1323195663885_780040.groovy
      report_with_scriplet.jasper
    compile_report.xml