Velocityのプロパティメモ+α

Velocityでテンプレートからファイルを出力する際のコード。


BufferedWriter writer = new BufferedWriter(new FileWriter("output.html"));
Template template = Velocity.getTemplate("template.vm");
template.merge(vc, writer);


ただし、Velocity#getTemplateに絶対パスを指定すると、なぜか動かない。
テンプレートファイルが存在しないと言われる。


解析すると、どうやらVelocityの設定でテンプレートの検索パスを指定できるらしいが、
デフォルトでは.(ドット)になっているっぽい。
そしてC:/template.vmと指定すると、「.C:/template.vm」を検索してくれる。
そりゃーあるはずないって。


なので、自分のvelocity.propertiesに


file.resource.loader.path = 検索ディレクト
と書いておいて、そこからの相対パスにすればOKっぽい。
こんな仕組みになっているのはWebで使えるから?
こんなののためにソースを追いかけることになるとは・・・。


ついでに、Velocityのログを出さない設定とテンプレートを
キャッシュする設定と処理中にテンプレートを変更しても
読み直さない設定とエンコーディングの設定メモ。


runtime.log.logsystem.class = org.apache.velocity.runtime.log.NullLogSystem
file.resource.loader.cache = true
file.resource.loader.modificationCheckInterval = 0
input.encoding = Windows-31J
output.encoding = Windows-31J
file.resource.loader.modificationCheckIntervalは0以下なら
なんでもいいらしい。


デフォルトの設定は、org.apache.velocity.runtime.defaultsにあるvelocity.properties。