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 を呼び出して使うことに(次回に続く)