Dynamicznie tworzone zadanie typu Kopiuj jest zawsze UP-TO-DATE

Przygotowałem bardzo prosty skrypt, który ilustruje problem, który widzę przy użyciu Gradle 1.7 (trzeba go trzymać, ponieważ niektóre wtyczki nie obsługują jeszcze nowszych wersji).

Próbuję dynamicznie tworzyć zadania, z których każdy odpowiada plikowi w katalogu projektu. Działa to dobrze, ale zadania, które tworzę, nigdy nie zostaną wykonane, gdy tylko przypiszę im typ „Kopiuj”.

Oto mój 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'

w ten sposób moje zadania nie zostaną wykonane, gdy wywołam po prostu zadanie domyślnegradle:

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

BUILD SUCCESSFUL

Jeśli usunę typCopy z mojego dynamicznego zadania (odkomentowanie powyższej linii) moje zadania zostaną wykonane:

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

BUILD SUCCESSFUL

(Musisz utworzyć nazwę folderutemplates w tym samym katalogu, w którymbuild.gradle znajduje się i umieść tam kilka pustych plików w celu uruchomienia testu)

Zgodnie z wyjściem debugowania:

Pomijanie zadania „: myDist-template1”, ponieważ nie ma plików źródłowych.

Pomijanie zadania „: myDist-template2”, ponieważ nie ma plików źródłowych.

Więc jak mogę określić pliki źródłowe i zrobić mojeCopy zadania wykonywane? Próbowałem dodać

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

do organu zadań próbowałem przypisać zadanieinputs.source file('/my/existing/file') bez powodzenia. Czy mógłbyś doradzić, jak zmodyfikować mój prosty skrypt, pozostawiając dynamiczne tworzenie zadań i utrzymywanie dynamicznych zadań typuCopy?

Dziękuję Ci!

Edytuj: W porządku, w ten sposób zostanie wywołane zadanie:

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

ale wygląda na to, że zawsze muszę to określićfrom/into. Nie wystarczy to zrobić w treści doLast {}.

questionAnswers(4)

yourAnswerToTheQuestion