2016-12-08 4 views
1

fehlgeschlagen Ich habe Folowing Code in biuld.gradle:Wie eine Aufgabe in gradle auszuführen erst nach Build

task generateReport(type: Exec){ 
    onlyIf{ 
     project.getState().failure 
    } 
    doLast{ 
     executable "generateReport.bat" 
    } 
} 

tasks.withType(Test)*.finalizedBy generateReport 

Ich habe versucht, vor:

task generateReport(type: Exec){ 
    executable "generateReport.bat" 
} 

tasks.withType(Test)*.finalizedBy generateReport 

gradle.afterProject {project, projectState -> 
    if (projectState.failure) { 
     doLast{ 
      generateReport 
     } 
    } 
} 

Und andere Beispiele, aber alles war nutzlos ..

Was habe ich falsch gemacht?

Antwort

0

Zuerst müssen Sie eine BuildListener verwenden, wie es bereits in anderen Antworten erwähnt wurde. Aber noch eine Anmerkung, Sie können eine Aufgabe nicht so nennen, wie Sie es getan haben, mit generateReport. So haben Sie eher ein exec rechts in der Schließung des Zuhörers zu verwenden, wie:

gradle.buildFinished { buildResult -> 
    if (buildResult.failure) { 
     exec { 
      executable "generateReport.bat" 
     } 
    } 
} 
+0

Danke, Ihr Beispiel wirklich helfen :) – rmarinsky

3

Sie müssen in den buildFinished Lifecycle Ereignis einzuhaken, wie folgt aus:

gradle.buildFinished { buildResult -> 
    if (buildResult.failure) { 
     println "Build Failed!" 
    } else { 
     println "Build Succeeded!" 
    } 
} 
+0

Eigentlich Ihr Beispiel für die Ausführung Aufgabe nicht arbeiten, ich habe es gebunden zu – rmarinsky

0

Project.state die Auswertung Zustand des Projekts ist es, nicht einige Ausführungszustand. Wenn Sie bei fehlgeschlagener Erstellung etwas tun möchten, sollten Sie gradle.addBuildListener() ausführen und in der BuildListener die Methode buildFinished() implementieren, in der Sie überprüfen können, ob der Build fehlgeschlagen ist (result.failure). Wenn Sie eine Aktion für jede fehlgeschlagene Testausführung durchführen möchten, sollten Sie stattdessen gradle.addListener() verwenden und eine Implementierung von TestListener angeben, in der Sie auf fehlgeschlagene Tests oder Testsuites reagieren können. Alternativ können Sie auch einen Test-Listener nur für bestimmte Testaufgaben mit testTask.addTestListener() hinzufügen. Oder um es noch netter zu machen, können Sie testTask.afterTest { ... } oder testTask.afterSuite { ... } tun.

Verwandte Themen