2016-11-09 2 views
1

Je souhaite exécuter une tâche Gradle qui récupère des sources supplémentaires et les configure avant que Gradle tente de résoudre les dépendances.Exécution d'une tâche Gradle avant la résolution des dépendances

Dans build.gradle, une tâche récupère le code source d'un sous-projet. La tâche doit être exécutée avant que Gradle ne tente de résoudre les dépendances, car le sous-projet fait partie des dépendances. La tâche implique l'extraction des sources d'un référentiel distant et le remplacement de quelques fichiers build.gradle pour rendre la génération possible.

Ce qui se passe maintenant:

  • J'exécuter la tâche.
  • Gradle tente de résoudre les dépendances avant d'exécuter la tâche.
  • Il échoue car l'une des dépendances nécessite le sous-projet (les sources que ma tâche est censée récupérer).

Bien sûr, la résolution des dépendances fait partie de la phase de construction "Configuration", donc la raison pour laquelle la tâche est exécutée est claire. La question est comment le faire fonctionner avant.

Bien sûr, je peux le faire fonctionner si je remplace ma tâche gradle par un script bash séparé et l'exécute manuellement avant que gradle ne fasse quelque chose. Cependant, cela signifierait que je duplique certaines variables dans les scripts de gradle et de bash (comme les noms de version et les noms de tags git). Ces variables sont utilisées à d'autres fins dans gradle, et les avoir à deux endroits est mauvais. Il y a d'autres raisons que je veux éviter cela, l'un d'entre eux étant - en utilisant un script bash signifierait que gradle échoue à faire notre construction du début à la fin ...

+1

Veuillez publier votre build.gradle au niveau du projet et le build.gradle du module d'application avec la sortie d'erreur que vous recevez dans la console Gradle et le moniteur. – apelsoczi

Répondre

0

Tout d'abord vous êtes incorrect que résoudre les dépendances fait partie de la phase "Configuration". Si vous faites usage de l'évaluation paresseuse de FileCollection alors il sera effectivement résolu dans la phase d'exécution. Une configuration sera résolue la première fois que resolve() est appelée. Veuillez voir le javadoc pour les méthodes qui entraînent la résolution d'une configuration. AFAIK le code gradle de base ne résoudra pas une configuration dans la phase mais votre code personnalisé « Configuration » peut provoquer ce (je vous suggère de refactoring si tel est le cas)

Vous pouvez faire quelque chose comme ceci:

dependencies { 
    // this is lazy evaluated 
    compile fileTree(dir: "$buildDir/dynamicJars", include: "*.jar") 
} 

task getDynamicJars(type: Copy) { 
    from zipTree('path/to/somefile.zip') 
    into "$buildDir/dynamicJars" 
} 

compile.dependsOn getDynamicJars