Как выполнять команды git параллельно со скриптом Gradle?

#android #gradle #groovy

Вопрос:

Я пытаюсь создать простой скрипт Gradle, который git клонирует множество репозиториев параллельно. Это код, который я придумал до сих пор:

 abstract class ParallelCloneTask extends org.gradle.api.DefaultTask {

    @Inject
    abstract WorkerExecutor getWorkerExecutor()

    @TaskAction
    def cloneRepos() {
        WorkQueue workQueue = getWorkerExecutor().noIsolation()
        List<String> paths = getRepoPaths()

        paths.each { path ->
            workQueue.submit(CloneSingleRepo.class) { CloneSingleRepoWorkParameter parameters ->
                parameters.getPath().set(path)
            }
        }
        println "Done"
    }}

abstract class CloneSingleRepo implements WorkAction<CloneSingleRepoWorkParameter> {

    @Override
    void execute() {
        String path = getParameters().getPath().get()
        String myCurrentDir = "/Users/myname/etc/"
        project.exec {
            workingDir "${myCurrentDir}"
            commandLine 'git', 'clone', "${path}"
        }
        println "Cloned repo ${path}"
    }

}

interface CloneSingleRepoWorkParameter extends WorkParameters {
    Property<String> getPath()
} 

task cloneRepos(type: ParallelCloneTask)

 

Когда я запускаю эту задачу, она завершается неудачно, потому что она не находит переменную «проект» в методе CloneSingleRepo execute ().
Почему это происходит и как я могу это исправить?

Если я напрямую обращаюсь к переменной «проект» в методе cloneRepos (), она работает нормально.

Комментарии:

1.Вместо использования project.exec вы должны иметь возможность @Inject abstract ExecOperations getExecOperations() входить в свой класс рабочих действий , а затем вызывать execOperations.exec внутри своего execute метода

2. Это работает! Большое вам спасибо, вы спасли мне жизнь! К сожалению, о рабочем API нет большой документации, или, возможно, я пропустил ее.