компиляция jrxml с помощью скрипта с использованием ant

Я пытаюсь скомпилировать jrxml с помощью ant. Я создал свой jrxml в iReports, поэтому у меня нет build.xml. При запуске команды ant запрашивает файл build.xml. Я создал этот файл в том же репертуаре, что и мой jrxml, но я не знаю, что я должен добавить в него, чтобы связать мой jrxml с моей банкой скриптлета. Я буду признателен за вашу помощь, я немного потерян.


person maya-bf    schedule 06.12.2011    source источник


Ответы (1)


Шаблон отчета можно скомпилировать с помощью ant-задачи net.sf.jasperreports.ant.JRAntCompileTask.

Образец взят из здесь:

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

Цитата с сайта:

In addition to the srcdir and the destdir attributes, the jrc custom Ant task shipped with JasperReports supports the following attributes:

  • compiler : Name of the class that implements the JRCompiler interface to be used for compiling the reports (optional).
  • xmlvalidation : Flag to indicate whether the XML validation should be performed on the source report template files (true by default).
  • tempdir : Location to store the temporarily generated files (the current working directory by default).
  • keepjava : Flag to indicate if the temporary Java files generated on the fly should be kept and not deleted automatically (false by default).

  • Рабочий образец:

    Класс 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
    

    После запуска скрипта структура папок будет такой:

    report
      report_with_scriplet.jrxml
    compiled_jasper
      report_with_scriplet_1323195663885_780040.groovy
      report_with_scriplet.jasper
    compile_report.xml
    
    person Alex K    schedule 06.12.2011
    comment
    Спасибо за ваш ответ. Вы знаете, где мы указываем путь к классу скрипта при компиляции jrxml? Я не вижу его в build.xml - person maya-bf; 06.12.2011
    comment
    Типа..я хоть там будет указан путь к классу скриптлета. Есть ли какие-либо идеи, как создается связь между путем к классу скриптлета и jrxml при компиляции? - person maya-bf; 06.12.2011
    comment
    У меня есть это: Неожиданный путь к элементу {} {antlib: org.apache.tools.ant} путь - person maya-bf; 06.12.2011
    comment
    @maya-bf Просто добавьте образец, чтобы ответить - person Alex K; 06.12.2011