huruyosi’s blog

プログラミングとかインフラとかのメモです。

リリース用のパッケージを作成する時にJasperReportの.jrxmlをコンパイルする方法

課題

今はiReportで.jrxmlのデザインとコンパイルを行い出力された.jasperをソースの一部としてリポジトリにコミットしているが、時折、.jasperがコミットされないことがあるので、リリース用のパッケージを作成する時にコンパイルしパッケージに含めることでリリース漏れをなくしない

コンパイルの方法

分かっている範囲では下の3つ

一つ目が今行っている方法です。 二つ目は始めた頃に使っていたけど、レポートを作成する度にコンパイルするので無駄な処理を行っているのと、もっと大きな問題としてコンパイルすると新しいクラスが定義されJVMにロードされるのでPermgenを食いつぶしてOutOfMemoryが発生します。 三つ目の方法を調べたのでそのメモだけ残します。

ant タスク

公式ドキュメント JasperReports 6.2.0 - Ant Compile Sample に書いてある通りです。 ダウンロードページ http://community.jaspersoft.com/project/jasperreports-library/releases にある jasperreports-{ver}-project.zip に含まれている samples が参考になります。

使い方

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

コンパイルを行います。filesetタグを使うこともできます。

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

サンプルを見る方法

ant タスクでDBサーバを立ち上げた後に、見たいサンプルを ant でコンパイルし、レポートを生成します。

DBサーバの起動方法

$ cd /opt
$ unzip /tmp/jasperreports-{ver}-project.zip
$ cd jasperreports-{ver}/demo/hsqldb
$ ant runServer

バーコードを例にしたサンプルの作成

Jasper Report5.xの頃に使っていた方法です。今のwikiを見ると少し手順が変わっているようす。

$ cd /opt
$ cd jasperreports-{ver}\demo\samples
$ cd barbecue
$ ant 

community.jaspersoft.com

maven の場合

公式の方法が分からなかったので、mavenにアップロードされているものかgithubで公開されているプラグインを使います。

Compile Jasper Reports with Maven | BowerStudios.com github.com

githubのソースを見るとこの程度なら自前で作ってもいいと思えました。

sinsengumi.net