Gradle: Ausführen einer Aktion nur, wenn eine Aufgabe nicht

Möchte ich öffnen Sie die report-Datei, die mehrere der "check" und "test" - plugins, die ich benutze, wenn eine überprüfung fehlschlägt. Ich weiß, ich verwenden können "finalizedBy zum ausführen einer anderen Aufgabe, egal, ob die original-Aufgabe ausgeführt wurde. Mit diesem wissen habe ich versucht, den folgenden zu öffnen Sie den Bericht nur, wenn die entsprechende Aufgabe (in diesem Beispiel checkstyle) schlägt fehl:

task showCheckStyleResultsInBrowser(type: Exec) {
    ext.htmlFileName = "main.html"
    executable 'open'
    args 'file:///' + checkstyleMain.reports.xml.destination.parent + "/" + ext.htmlFileName
}

task showCheckStyleResultsIfFailed {
    ext.aCheckFailed = true
    doLast {
        if (ext.aCheckFailed) {
            showCheckStyleResultsInBrowser.execute()
        }
    }
}

checkstyleMain {
    finalizedBy 'showCheckStyleResultsIfFailed'
    doLast {
        //convert the xml output to html via https://stackoverflow.com/questions/20361942/generate-checkstyle-html-report-with-gradle
        ant.xslt(in: reports.xml.destination,
                 style: new File('config/checkstyle/checkstyle-noframes-sorted.xsl'),
                 out: new File(reports.xml.destination.parent, showCheckStyleResultsInBrowser.htmlFileName))

        showCheckStyleResultsIfFailed.aCheckFailed = false
    }
}

Erklärung (soweit ich es verstehe):

  • showCheckStyleResultsInBrowser tritt die Aufgabe, die eigentlich die Eröffnung des Berichts. Sie können ignorieren, was Sie eigentlich tut, aber es ist die eine, die ausgeführt werden soll, wenn der check-Aufgabe schlägt fehl,
  • Die showCheckStyleResultsIfFailed Aufgabe deklariert eine Eigenschaft aCheckFailed und initialisiert es auf true. Wenn es ausgeführt wird, überprüft es, ob es ist immer noch wahr (was bedeutet, dass die Prüfung nicht erfolgreich abgeschlossen wurde) und wenn ja, öffnet sich der Bericht mit showCheckStyleResultsInBrowser.
  • checkstyleMain ist die Aufgabe, die die tatsächliche Prüfung. Ich interessiere mich für das Ergebnis. Allerdings weiß ich nicht, wie man es. Anstatt also, in der Ende des checkStyleMain Aufgabe, habe ich die aCheckFailed Eigenschaft false sich auf die Tatsache, dass der Letzte Schritt wird nur ausgeführt, wenn keine der vorherigen Prüfungen gescheitert.
  • showCheckStyleResultsIfFailed zur Ausführung nach checkstyleMain egal, was von finalizedBy. Auf diese Weise wird es ausgeführt, selbst wenn checkstyleMain ausfällt. Es verwendet die aCheckFailed - Eigenschaft, um zu bestimmen, ob checkstyleMain erfolgreich abgeschlossen wurde.

Dies funktioniert ok, wenn ich eine komplette bauen. Aber wenn ich nur einen teilweisen Wiederaufbau und die checkstyleMain task wird nicht ausgeführt, da alle Ergebnis sind bereits up-to-date, dass ich am Ende mit aCheckFailed wahr, weil checkstyleMain nicht laufen, das macht es Aussehen, als ob tatsächlich etwas falsch gelaufen ist.

Also, wie kann ich Sie ausführen, meine showCheckStyleResultsInBrowser Aufgabe, wenn, und nur wenn die checkstyleMain Aufgabe scheitert? Auch, meine Lösung ist etwas umständlich und hacky auch für das, was es tut, erreichen. Gibt es einen einfacheren Weg?

InformationsquelleAutor Joachim Kurz | 2014-10-15
Schreibe einen Kommentar