リリース用のパッケージを作成する時にJasperReportの.jrxmlをコンパイルする方法
課題
今はiReportで.jrxml
のデザインとコンパイルを行い出力された.jasper
をソースの一部としてリポジトリにコミットしているが、時折、.jasper
がコミットされないことがあるので、リリース用のパッケージを作成する時にコンパイルしパッケージに含めることでリリース漏れをなくしない
コンパイルの方法
分かっている範囲では下の3つ
- iReportでデザインを行った時にコンパイルする
- JasperCompileManager http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JasperCompileManager.html を使って実行時にコンパイルする
- ant タスクでコンパイルする
一つ目が今行っている方法です。 二つ目は始めた頃に使っていたけど、レポートを作成する度にコンパイルするので無駄な処理を行っているのと、もっと大きな問題としてコンパイルすると新しいクラスが定義され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
maven の場合
公式の方法が分からなかったので、mavenにアップロードされているものかgithubで公開されているプラグインを使います。
Compile Jasper Reports with Maven | BowerStudios.com github.com
githubのソースを見るとこの程度なら自前で作ってもいいと思えました。