重构gradle任务中的重复代码;类型:复制“;

重构gradle任务中的重复代码;类型:复制“;,gradle,groovy,build.gradle,Gradle,Groovy,Build.gradle,gradle项目包含几个类似的任务类型:Copy,其中一些任务需要额外检查 task copyPackage1(type: Copy) { from buildPackage1 into "/pkgs/" eachFile { if (it.relativePath.getFile(destinationDir).exists()) { throw new GradleException("Probably version was

gradle项目包含几个类似的任务
类型:Copy
,其中一些任务需要额外检查

task copyPackage1(type: Copy) {
    from buildPackage1
    into "/pkgs/"
    eachFile {
        if (it.relativePath.getFile(destinationDir).exists()) {
            throw new GradleException("Probably version was no updated. File exists: " + it)
        }
    }
}
...
task copyPackage2(type: Copy) {
    from buildPackage2
    into "/pkgs/"
    eachFile {
        if (it.relativePath.getFile(destinationDir).exists()) {
            throw new GradleException("Probably version was no updated. File exists: " + it)
        }
    }
}

如何重构重复检查并为所有类似任务(但不是所有
Copy
任务)指定相同的目标目录?

您可以使用自定义的Gradle插件(如Gradle论坛上的建议)实现此功能,或者使用简单的Groovy方法创建和配置任务,如下所示:

// define a "task creator" method 
ext.createCopyToPkgTask = { String taskName ,  String fromDir ->
    return project.tasks.create(taskName, Copy.class){
        from fromDir
        into "/pkgs"
        eachFile {
            if (it.relativePath.getFile(destinationDir).exists()) {
                throw new GradleException("Probably version was no updated. File exists: " + it)
            }
        }
    }
}

/* declare your similar tasks using the creator method above */
createCopyToPkgTask("copyPackage1","buildPackage1")
createCopyToPkgTask("copyPackage2","buildPackage2")
// ...

需要一个小的更新:
stringfromdir
->
fromDir
<代码>“buildPackage1”->
buildPackage1
,因为它不是字符串,而是任务。