2017-01-20 1 views
0

J'ai la tâche gradle suivante dans build.gradle fichier d'un sous-projet pour copier file.txt à partir d'un répertoire appelé from_dir/ à un répertoire to_dir/ et renommez fileRenamed.txt:Gradle tâche de copie opérateur de ne pas trouver les fichiers source lors leftShift (<<) utilisé

task copyRenameFile(type: Copy) { 
    System.out.println("copyRenameFile begin") 
    from('from_dir') 
    into('to_dir') 
    include('file.txt') 
    rename('file.txt', 'fileRenamed.txt') 
    System.out.println("copyRenameFile end") 
} 

build.finalizedBy(copyRenameFile) 

Quand je lance gradlew :subprojectname:build, cette tâche exécute la copie comme prévu après la tâche de construction est finalisée, mais il exécute le println s pendant la phase de configuration, avant la tâche de génération.

Pour tenter de faire les println s apparaissent après la phase de construction lorsque la copie est en fait en cours d'exécution, j'ai essayé d'utiliser l'opérateur << comme ceci:

task copyRenameFile(type: Copy) << { 

Mais cela se traduit dans les êtres tâche sautées avec le message suivant:

[INFO] [org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter] Skipping task ':subprojectname:copyRenameFile' as it has no source files. 

Est-ce que cela signifie file.txt n'a pas pu être trouvé lors de la phase d'exécution? Pourquoi?

EDIT: Après avoir lu this réponse, je comprends maintenant que mon utilisation de l'opérateur << est à l'origine de la phase de configuration pour ignorer cette tâche et ceci est la raison pour laquelle les fichiers source ne sont pas trouvés. Donc, je suppose que je ne peux pas utiliser l'opérateur <<, mais comment puis-je faire les println s se produire lorsque la tâche est en cours d'exécution et non quand il est en cours de configuration?

Répondre

0

I figured it out:

task copyRenameFile(type: Copy) { 
    doFirst{ 
     System.out.println("copyRenameFile begin") 
    } 

    from('from_dir') 
    into('to_dir') 
    include('file.txt') 
    rename('file.txt', 'fileRenamed.txt') 

    doLast{ 
     System.out.println("copyRenameFile end") 
    } 
} 

build.finalizedBy(copyRenameFile) 

je me suis débarrassé de la << et au lieu utilisé doFirst et doLast pour assurer mes println s pendant la phase se sont produites d'exécution.