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 {}.