Рефакторинг дублированного кода в задаче gradle «type: Copy»

Gradle-проект содержит несколько похожих type:Copy задач type: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 )?

Всего 1 ответ


Вы можете реализовать это с помощью пользовательского плагина 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")
// ...

Есть идеи?

10000