2017-10-19 32 views
0

J'ai un projet qui comprend un sous-projet comme ceci:Comment appeler la tâche d'un sous-projet Gradle à partir d'un test Gradle?

Root Project 
|----gradle.build 
|----SubProject 
|----|----gradle.build 

Le sous-projet ici contient un script de copie que j'ai besoin appelée lorsque la commande de test du projet racine est appelé.

J'ai essayé d'appeler la tâche du sous-projet dans le projet Root comme ceci:

Task myTest(type: Test) { 
    Project(‘:SubProject’).tasks.myCopyTask.execut() 
} 

Cependant, il en résulte une erreur, « Impossible d'obtenir la propriété inconnue « myCopyTask » pour la tâche. »

Savez-vous comment cet appel doit être fait, et quelle devrait être la syntaxe appropriée?

Répondre

1

Il a plusieurs choses ne fonctionne pas dans votre exemple:

  1. Vous devez jamais appel execute sur les tâches! JAMAIS! Les tâches sont appelées automatiquement par le système de tâches Gradles et l'appel execute peut casser ce système.
  2. La fermeture ({ }) que vous utilisez lors de la création d'une tâche est destinée à la configuration. Il n'est pas exécuté lorsque la tâche est exécutée, mais quand elle est créée.
  3. Les sous-projets dans Gradle sont créés et évalués après le projet racine est créé et évalué. Ainsi, les tâches des sous-projets n'existent même pas lorsque le projet racine est évalué.

Vous pouvez résoudre tous ces problèmes en utilisant la méthode dependsOn avec des chemins de tâche absolue:

task myTest (type: Test) { 
    dependsOn ':Subproject:myCopyTask' 
}