Tarefa criada dinamicamente do tipo Cópia é sempre UP-TO-DATE
Eu preparei um script muito simples, que ilustra o problema que vejo usando o Gradle 1.7 (é necessário ficar com ele por causa de alguns plugins que ainda não suportam versões mais recentes).
Eu estou tentando criar dinamicamente tarefas cada uma delas corresponde a um arquivo no diretório do projeto. Isso funciona bem, mas as tarefas que eu crio nunca são executadas assim que eu as atribuo digite 'Copiar'.
Aqui está o meu problemabuild.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'
Desta forma, minhas tarefas não são executadas quando eu chamo a tarefa padrão chamando simplesmentegradle
:
MYDISTALL
:myDist-template1 UP-TO-DATE
:myDist-template2 UP-TO-DATE
:distAll UP-TO-DATE
BUILD SUCCESSFUL
Se eu remover o tipoCopy
da minha tarefa dinâmica (descomentando a linha acima), minhas tarefas são executadas:
MYDISTALL
:myDist-template1
MYDIST-template1
:myDist-template2
MYDIST-template2
:distAll
BUILD SUCCESSFUL
(Você precisará criar um nome de pastatemplates
no mesmo diretório ondebuild.gradle
está localizado e coloca alguns arquivos vazios nele para executar o teste)
De acordo com a saída de depuração:
Ignorando tarefa ': myDist-template1', pois não possui arquivos de origem.
Ignorando tarefa ': myDist-template2', pois não possui arquivos de origem.
Então, como posso especificar arquivos de origem e fazer o meuCopy
tarefas executadas? Eu tentei adicionar
from( '/absolute/path/to/existing/file' ) {
into 'myfolder'
}
para o corpo da tarefa, eu tentei atribuir tarefasinputs.source file('/my/existing/file')
sem sucesso. Poderia, por favor, aconselhar sobre como modificar meu script simples, deixando a criação de tarefas dinâmicas e mantendo minhas tarefas dinâmicas do tipoCopy
?
Obrigado!
Edit: Tudo bem, desta forma a tarefa é chamada:
file('templates').listFiles().each { File f ->
task "myDist-${f.name}" (type: Copy) {
from f
into 'dist'
doLast {
println "MYDIST-" + f.name
}
}
}
mas parece que devo sempre especificarfrom
/into
. Não é suficiente fazer isso no corpo do {} do DoLast.