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にあげておきました。