groovy SimpleTemplateEngine、StreamingTemplateEngine そして ant copy へ~ 1
こんにちは、開発担当の Masa です。
実装中のテスト(Spock)で使用するファイルに groovy のテンプレートエンジンを使用したところ、エンジンに
問題があり結局 ant copy を使用することになりました。
今日は groovy のテンプレートエンジンの使い方と問題点について語ります。
まずは SimpleTemplateEngine の使い方から。
‘$’ 自体を表示させたい場合は ‘\‘ でエスケープします。
1 2 3 4 5 6 7 8 9 10 11 | 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 の設定ファイルから生成すると...
1 2 3 4 5 6 | 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 を呼び出して使うことに(次回に続く)