GradleでWARをマージする方法
またまたGradle小ネタです。WARファイルをビルドする時に、別のWARファイルをマージしたいときがあります。
Mavenならmaven-war-pluginのオーバーレイを使えばできるのだが、Gradleならどうするか?
残念ながら、現状のGradle(1.0-milestone-9)のWAR PluginではMavenのようなオーバーレイ機能はサポートしていないようだ。ただ、そこはさすがGradle(というかGroovyのパワーを借りてだが)、以下のように比較的シンプルに書ける。
apply plugin: 'war' war << { ant.zip(destfile: war.archivePath, duplicate: 'preserve', keepcompression: true, update: true) { zipfileset (src: project(':common').war.archivePath) } }
warのアクションの最後に、antのzipタスクで別のWARを重ねているだけです。ポイントは、duplicate: 'preserve'とすることで、同名のファイルを上書きしないようにすること。
追記
サンプルをGithubにあげておきました。