Рефакторинг дублированного кода в задаче gradle "type: Copy" - PullRequest
0 голосов
/ 17 мая 2019

Gradle-проект содержит несколько похожих задач 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 Ответ

1 голос
/ 17 мая 2019

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