2012-01-23 7 views
11

ja nie wiem, czy nie robię z tego prawa lub jeśli mam do obsługi wbudowanych zadań Gradle różnie, ale mam zadania testowe, które zdefiniowałem jak tenJak wykonać wbudowane zadanie gradle w zamknięciu doFirst/doLast?

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

i staram się go używać w zamknięcie doFirst jak ten

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

ale to nie działa z jakiegoś powodu próbowałem również

testNGTests.executeTests() 

ale to nie działało. Czy istnieje specjalny sposób, w jaki muszę obsłużyć wbudowane zadanie testowe?

używam wersji 0.9.2 Gradle

+0

Zadania nie obsługują 'execute()' połączeń. Występują tylko zamknięcia (tj. Defs metody). –

Odpowiedz

14

Wykonanie zadania z innym zadaniem nie jest (i nigdy nie było) oficjalnie obsługiwane. Spróbuj zamiast tego używać zależności zadań, np. taskA.dependsOn(testNGTests).

+1

Ale nie ma sposobu, aby wspierać zamawianie, jeśli istnieje wiele zależności, prawda? Jak mógłbym to obejść? – AgentRegEdit

+0

Podaj konkretny przykład. 'taskA.dependsOn (taskB, taskC)' jest skrótem dla 'taskA.dependsOn (taskB); taskA.dependsOn (taskC) '. Ale możesz oczywiście wykonać 'taskA.dependsOn (taskB); taskB.dependsOn (taskC) '. –

+0

, więc jeśli mam 'taskA (dependsOn: taskB, taskC)' gradle uruchom taskC taskB, a następnie taskA, ale jeśli mam 'taskA (dependsOn: taskC, taskB)' gradle nadal uruchamia go w kolejności taskB, taskC , taskA, zależności są porządkowane alfabetycznie, co wydaje się nieco dziwne. – AgentRegEdit

6

Znalazłem obejście, aby to zrobić. W moim scenariuszu mam zadanie, które czyta dane użytkownika i w zależności od jego anwser potrzebuję utworzyć EAR z różnymi konfiguracjami. Użyłem zadania typu GradleBuild. Oto kod:

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 
} 

W Tobie przypadek można wykonać następujące czynności:

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

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

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

Dlaczego przed wykonaniem musisz poprzedzić 'tasks.'? –