groovy SimpleTemplateEngine、StreamingTemplateEngine そして ant copy へ~ 1

こんにちは、開発担当の Masa です。

実装中のテスト(Spock)で使用するファイルに groovy のテンプレートエンジンを使用したところ、エンジンに
問題があり結局 ant copy を使用することになりました。

今日は groovy のテンプレートエンジンの使い方と問題点について語ります。

まずは SimpleTemplateEngine の使い方から。

'$' 自体を表示させたい場合は '\' でエスケープします。

def template = '''ひらがな $kana
漢字 ${kanji}
Alphabet $alphabet

escape character \\$kana'''

def binding = ["kana":"ほげ", "kanji":"歩毛", "alphabet":"hoge"]
def engine = new groovy.text.SimpleTemplateEngine()
def text = engine.createTemplate(template).make(binding)

println text

出力結果

ひらがな ほげ
漢字 歩毛
Alphabet hoge

escape character $kana

今回はテンプレートを読み込んで別名で保存するのでちょっと修正。
ついでに置き換えに使用するマップを groovy の設定ファイルから生成すると...

def engine = new groovy.text.SimpleTemplateEngine()
def binding = new ConfigSlurper().parse(url).flatten()
def reader = new File('C:\\Test\\template.txt').newReader('Shift-JIS')

def text = engine.createTemplate(reader).make(binding)
new File('C:\\Test\\hoge.txt').withWriter('Shift-JIS') { writer -> writer << text }

ConfigSlurper はホント便利ですね。
SimpleTemplateEngine だと 64KB までのデータしか扱えないので StreamingTemplateEngine に変更します。

ここで問題発生です。StreamingTemplateEngine だとエスケープ文字が残ったままに。

つまり、SimpleTemplateEngine では

escape character $kana

だったのが、StreamingTemplateEngine では

escape character \$kana

となります。やめてほしい...

解決できなかったので、結局 ant を呼び出して使うことに(次回に続く)