Как выполнить встроенную задачу gradle в закрытии doFirst/doLast?

Я не знаю, не буду ли я делать это правильно или мне придется обрабатывать встроенные gradle задачи по-разному, но у меня есть тестовая задача, которую я определил как

task testNGTests(type: Test) {
     useTestNG()
}

и пытаюсь использовать его в doFirst закрытии, подобном этому

task taskA {
  doFirst {
        testNGTests.execute()
   }
}

но по какой-то причине это не работает, я также пробовал

testNGTests.executeTests() 

но это тоже не сработало. Есть ли особый способ обработки встроенной тестовой задачи?

Я использую gradle версию 0.9.2

Ответ 1

Выполнение задачи из другой задачи не поддерживается (и никогда не было) официально. Вместо этого попробуйте использовать зависимости задач. taskA.dependsOn(testNGTests).

Ответ 2

Я нашел обходное решение для этого. В моем сценарии у меня есть задача, которая читает пользовательский ввод, и в зависимости от его андерсера мне нужно создать EAR с разными конфигурациями. Я использовал задачу типа GradleBuild. Вот код:

task createEar() << {   
    def wichTypeOfEar = System.console().readLine("Which EAR?? (a, b)\n")    
    if(wichTypeOfEar == 'a'){
        tasks.earA.execute()
    }else{
        tasks.earB.execute()
    }    
}

task earA(type: GradleBuild) {
    doFirst{
       // Here I can do some stuffs related to ear A
    }
    tasks = ['ear']
}

task earB(type: GradleBuild) {
    doFirst{
       // Here I can do some stuffs related to ear B
    }
    tasks = ['ear']
}

ear {
   //Here is the common built in EAR task from 'ear' plugin
}

В этом случае вы можете сделать следующее:

task testNGTests(type: Test) {
    useTestNG()    
}

task testNGTestsWrapper(type: GradleBuild){
    tasks = ['testNGTests']
}

task taskA {
    doFirst {
    testNGTestsWrapper.execute()
    }
}