2012-01-23 8 views
11

Non so se io non sto facendo questo diritto o se devo gestire le attività Gradle incorporati in modo diverso, ma ho un compito test che ho definito come questoCome si esegue un'attività incorporata gradle in una chiusura doFirst/doLast?

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

e sto cercando di utilizzare in una chiusura doFirst come questo

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

ma non funziona per qualche motivo, ho anche provato

testNGTests.executeTests() 

, ma che non ha funzionato neanche. C'è un modo speciale in cui devo gestire l'attività di test integrata?

Sto usando la versione 0.9.2 Gradle

+0

Compiti non supportano 'execute()' chiamate. Solo le chiusure (cioè i metodi def) fanno. –

risposta

14

L'esecuzione di un compito da un altro compito non è (e non è mai stato) ufficialmente supportato. Prova a utilizzare invece le dipendenze delle attività, ad es. taskA.dependsOn(testNGTests).

+1

Ma non c'è modo di supportare l'ordine se ci sono più dipendenze, giusto? Come potrei aggirare questo? – AgentRegEdit

+0

Si prega di dare un esempio concreto. 'taskA.dependsOn (taskB, taskC)' è una scorciatoia per 'taskA.dependsOn (taskB); taskA.dependsOn (TaskC) '. Ma puoi ovviamente eseguire 'taskA.dependsOn (taskB); taskB.dependsOn (TaskC) '. –

+0

quindi se ho un 'taskA (dependsOn: taskB, taskC)' gradle eseguirà taskC taskB e poi taskA, ma se ho 'taskA (dependsOn: taskC, taskB)' gradle lo esegue ancora nell'ordine di taskB, taskC , taskA, le dipendenze vengono ordinate alfabeticamente, il che sembra un po 'strano – AgentRegEdit

6

Ho trovato una soluzione alternativa per fare questo. Nel mio scenario ho un compito che legge un input dell'utente e, a seconda del suo anser, ho bisogno di creare un EAR con diverse configurazioni. Ho utilizzato un'attività di tipo GradleBuild. Ecco il codice:

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 
} 

In caso si potrebbe procedere come segue:

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

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

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

Perché è necessario anteporre 'compiti? Prima dell'esecuzione? –

Problemi correlati