Динамически создаваемая задача типа Copy всегда UP-TO-DATE
Я подготовил очень простой скрипт, который иллюстрирует проблему, которую я вижу при использовании Gradle 1.7 (нужно придерживаться его из-за того, что некоторые плагины еще не поддерживают более новые версии).
Я пытаюсь динамически создавать задачи, каждая из которых соответствует файлу в каталоге проекта. Это прекрасно работает, но задачи, которые я создаю, никогда не выполняются, как только я назначаю им тип «Копировать».
Вот моя проблемаbuild.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'
таким образом, мои задачи не выполняются, когда я просто вызываю вызов задачи по умолчаниюgradle
:
MYDISTALL
:myDist-template1 UP-TO-DATE
:myDist-template2 UP-TO-DATE
:distAll UP-TO-DATE
BUILD SUCCESSFUL
Если я удалю типCopy
из моей динамической задачи (раскомментируя строку выше) мои задачи выполняются:
MYDISTALL
:myDist-template1
MYDIST-template1
:myDist-template2
MYDIST-template2
:distAll
BUILD SUCCESSFUL
(Вам нужно будет создать имя папкиtemplates
в том же каталоге, гдеbuild.gradle
находится и поместите туда пару пустых файлов для запуска теста)
Согласно выводу отладки:
Пропуск задачи ': myDist-template1', поскольку у нее нет исходных файлов.
Пропуск задачи ': myDist-template2', поскольку у нее нет исходных файлов.
Так как я могу указать исходные файлы и сделать мойCopy
задачи выполнить? Я пытался добавить
from( '/absolute/path/to/existing/file' ) {
into 'myfolder'
}
в теле задачи, я попытался назначить задачиinputs.source file('/my/existing/file')
без успеха. Не могли бы вы посоветовать, как изменить мой простой скрипт, оставив динамическое создание задач и сохраняя мои динамические задачи типаCopy
?
Спасибо!
Редактировать: Хорошо, таким образом, задача вызывается:
file('templates').listFiles().each { File f ->
task "myDist-${f.name}" (type: Copy) {
from f
into 'dist'
doLast {
println "MYDIST-" + f.name
}
}
}
но, похоже, я всегда должен указыватьfrom
/into
, Этого недостаточно для этого в теле doLast {}.