Gradle実践シリーズその3です〜
今回はantでよく使われるreplaceをgradleで行なってみます。
htmlやjspでjsをincludeする時、タイムスタンプをパラメータに付与して、ビルド毎にキャッシュを入れ替える処理をやる事があります。
<script type="text/javascript" src="http://platform.twitter.com/widgets.js?t=20130606235611"></script>
こうすると、ビルドしたタイミングのタイムスタンプがパラメータに付与され、デプロイ毎にクライアント(ブラウザ)のキャッシュをリフレッシュさせる事ができます。
antでこれをやる場合、まずhtmlまたはjspに以下を書きます。
<script type="text/javascript" src="http://platform.twitter.com/widgets.js?t=TIMESTAMP"></script>
続いてbuild.xmlです。これをタスクとして実行すると、文字列置換が行われます。
<tstamp> <format property="now" pattern="yyyyMMddHHmmss" /> </tstamp> <replace dir="${web.dir}" token="TIMESTAMP" value="${now}"> <include name="**/*.jsp"/> <include name="**/*.html"/> </replace>
ではこれをgradleで書いてみましょう。
war { def now = new Date().getTime().toString() // jspのtoken置換 from(webAppDir) { include '**/*.jsp' filter(ReplaceTokens, tokens:['TIMESTAMP': now]) } }
gradleの場合はwarタスクの際にリプレースします。
これでwarにpackageする際にリプレースを行う事ができます。
しかしここで注意点があります。
実は以下はリプレースされません。
<script type="text/javascript" src="http://platform.twitter.com/widgets.js?t=TIMESTAMP"></script>
gradleの規約?で、以下のように書かないと置換されません。
<script type="text/javascript" src="http://platform.twitter.com/widgets.js?t=@TIMESTAMP@"></script>
@で挟んだ部分のみ置換対象となるので、注意しましょう。
javaのビルドをgradleで行う:調査編1:maven・SBTとの違い - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:調査編2:依存から1行で特定jarを除外! - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:調査編3:seasar系の依存の注意点 - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:調査編4:Groovy Librariesの罠 - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:実践編1:jsとcssのcombineとminify - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:実践編2:静的ファイルの圧縮 - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:実践編3:jspの文字列置換(ReplaceTokens) - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:実践編4:あれどうやるの?の疑問と自己解決 - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:実践編5:マルチプロジェクト時のprovidedCompileについて - 文系プログラマによるTIPSブログ
javaのビルドをgradleで行う:実践編6:高速に実用的な実行可能jarを生成する - 文系プログラマによるTIPSブログ