Gradle:フォルダ(ディレクトリ)をまるまるコピーするタスク
もともとGradleにはCopyタスクというのがあるが、これが非常に使いづらくわかりづらいので、antを使用したコピータスクを作成した。フォルダ(ディレクトリ)のみをまるごとコピーするが、コピーしないパターン、コピーするパターンも指定できる。
// フォルダまるごとをコピーするタスク
//
// task copyit(type: CloneDir) {
// src = 'srcFolder'
// dst = 'dstFolder'
// }
// 含めるパターンがあれば、includesを指定する。省略時はすべて含まれるものとする。
// task copyit(type: CloneDir) {
// src = 'srcFolder'
// dst = 'dstFolder'
// includes = ['**/.*']
// }
// 除外パターンがあれば、excludesを指定する
// task copyit(type: CloneDir) {
// src = 'srcFolder'
// dst = 'dstFolder'
// excludes = ['**/.*']
// }
class CloneDir extends DefaultTask {
String src;
String dst;
/* antのfilesetの除外パターン。省略時は何も除外されない */
List excludes = []
/* antのfilesetの包含パターン。省略時はすべてを包含する */
List includes;
@TaskAction
def duplicate() {
getProject().ant {
delete dir:dst
copy(todir:dst) {
fileset(dir: src) {
excludes.each { exclude(name:it) }
if (includes != null) {
includes.each { include(name:it) }
}
}
}
}
}
}
// このタスク定義をbuild.gradle以外に置く場合は以下が必要
ext.CloneDir = CloneDir
使い方は簡単だ。例えば以下のようにする。コピー前にfolder2は削除されるので不要なファイルが残ることはない。
以下の例では、ドットから始まるファイル名はコピーしない。
task copyit(type: CloneDir) {
src = "folder1";
dst = "folder2";
excludes=['**/.*']
}
ディスカッション
コメント一覧
まだ、コメントがありません