2016-10-13 8 views
1

In Gradle ist es einfach zu definieren, Aufgaben nach dem Build ausgeführt werden.Gradle Kopie Aufgabe nach Build

task finalize1 << { 
    println('finally1!') 
} 
build.finalizedBy(finalize1) 

Dies funktioniert wie erwartet. Aber jetzt möchte ich am Ende eine Kopieraufgabe ausführen.

task finalize (type: Copy) { 
    def zipFile = file('data/xx.zip') 
    def outputDir = file("data/") 
    println('Unzip..') 
    from zipTree(zipFile) 
    into outputDir 
} 
build.finalizedBy(finalize) 

Dies funktioniert nicht mehr. Ich sehe die "Unzip" Ausgabe am Anfang des Builds (Ich brauche den Extrakt am Ende).

Unzip.. 
:clean 
:compileJava 
:processResources 
:classes 
:findMainClass 
:jar 
:bootRepackage 
:assemble 
... 

<< funktioniert der Trick scheint es aber, wie ich kann ich diese beiden zusammenführen?

Antwort

2

Sie müssen nicht. Sie sehen Unzip... am Anfang des Builds, aber es bedeutet nicht, dass Gradle Ihre Aufgabe in diesem Moment ausführt.

Diese Nachricht wird in der Konsole ausgegeben, wenn Gradle beginnt, Ihre Kopieraufgabe zu konfigurieren, z. Hinzufügen von Pfaden zu Ein- und Ausgängen. Die eigentliche Ausführung erfolgt nach dem Build. Um sicherzustellen, dass Sie doLast Verschluss verwenden:

task finalize (type: Copy) { 
    doLast { println 'running now' } 
    ... 
} 

-Code innerhalb doLast Block wird nach Build ausgeführt werden.

P.S. Verschieben Sie den Rest Ihres Aufgabencodes (from zipTree(zipFile), usw.) nicht in doLast Schließung, es wird nicht funktionieren.

+0

Das Hinzufügen von 'doAfter' funktioniert nicht:' Die Methode doAfter() konnte für die Argumente [build_92jecjaiieertrt4v2cwwz3ik0j $ _run_closure6 $ _closure9 @ 41b0297c] auf der Task ': unzipTestData' des Typs org.gradle.api.tasks.Copy nicht gefunden werden. – DerM

+0

@DerM Entschuldigung, ich habe den Namen vergessen. Es heißt DoLast, nicht DoAfter – AdamSkywalker

Verwandte Themen