#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 нет большой документации, или, возможно, я пропустил ее.