Dynamisch erstellte Aufgaben vom Typ Kopieren sind immer auf dem neuesten Stand

Ich habe ein sehr einfaches Skript erstellt, das das Problem veranschaulicht, das ich bei der Verwendung von Gradle 1.7 sehe (ich muss mich daran halten, da einige Plugins neuere Versionen noch nicht unterstützen).

Ich versuche, dynamisch Aufgaben zu erstellen, von denen jede einer Datei im Projektverzeichnis entspricht. Dies funktioniert einwandfrei, aber die Aufgaben, die ich erstelle, werden nie ausgeführt, sobald ich sie dem Typ "Kopieren" zuordnete.

Hier ist mein Problembuild.gradle:

file('templates').listFiles().each { File f ->

    // THIS LINE DOES NOT WORK
    task "myDist-${f.name}" (type: Copy) {

    // NEXT LINE WORKS
    //task "myDist-${f.name}" {
        doLast {
            println "MYDIST-" + f.name
        }
    }
}

task distAll(dependsOn: tasks.matching { Task task -> task.name.startsWith("myDist")}) {
    println "MYDISTALL"
}

defaultTasks 'distAll'

Auf diese Weise werden meine Aufgaben nicht ausgeführt, wenn ich die Standardaufgabe einfach aufrufegradle:

MYDISTALL
:myDist-template1 UP-TO-DATE
:myDist-template2 UP-TO-DATE
:distAll UP-TO-DATE

BUILD SUCCESSFUL

Wenn ich Typ entferneCopy Von meiner dynamischen Aufgabe (ohne Kommentar in der obigen Zeile) werden meine Aufgaben ausgeführt:

MYDISTALL
:myDist-template1
MYDIST-template1
:myDist-template2
MYDIST-template2
:distAll

BUILD SUCCESSFUL

(Sie müssen einen Ordnernamen erstellentemplates im selben Verzeichnis wobuild.gradle befindet und dort ein paar leere Dateien ablegt, um den Test auszuführen)

Entsprechend der Debug-Ausgabe:

Aufgabe ': myDist-template1' wird übersprungen, da sie keine Quelldateien enthält.

Aufgabe ': myDist-template2' überspringen, da keine Quelldateien vorhanden sind.

Also, wie kann ich Quelldateien angeben und meine erstellen?Copy Aufgaben ausführen? Ich habe versucht hinzuzufügen

from( '/absolute/path/to/existing/file' ) {
    into 'myfolder'
}

Ich habe versucht, dem Aufgabenkörper Aufgaben zuzuweiseninputs.source file('/my/existing/file') ohne erfolg. Können Sie mir bitte mitteilen, wie ich mein einfaches Skript ändern kann, indem ich die dynamische Aufgabenerstellung verlasse und meine dynamischen Aufgaben vom Typ behalte?Copy?

Vielen Dank!

Edit: Okay, auf diese Weise wird die Aufgabe aufgerufen:

file('templates').listFiles().each { File f ->
    task "myDist-${f.name}" (type: Copy) {
        from f
        into 'dist'
        doLast {
            println "MYDIST-" + f.name
        }
    }
}

aber es sieht so aus, als müsste ich immer angebenfrom/into. Es reicht nicht aus, das im doLast {} -Körper zu tun.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage