Gradle 2.5 a été annoncé ce mois-ci et inclut un certain nombre de fonctionnalités en incubation, comme les Constructions Continues, les Règles de Substitution de Dépendances, les Evènements de Progression, les Tests Google et d'autres.
Constructions Continues
L'une des fonctionnalités les plus importantes apportées dans Gradle 2.5 est le support pour les constructions continues. Lorsqu'il est lancé avec le paramètre -continuous
ou -t
, Gradle effectuera la construction, puis surveillera les changements dans le code source ou les tests et initiera automatiquement la même construction lorsqu'un changement se produit. Si le code source du projet change, Gradle recompilera puis exécutera les tests. Si le code des tests change, alors il recompilera les tests puis les exécutera. Seules les tâches affectées sont exécutées. Les modifications du script de construction ne déclenche pas une autre construction automatique. Une commande de construction manuelle doit être invoquée pour que les modifications soient prises en compte. L'équipe entend inclure les référentiels distants dans le processus de construction continue dans le futur.
Il y a quelques limitations : les modifications faites sur les fichiers pendant la phase de configuration de la construction ne déclenche pas de nouvelle construction. De même, Gradle utilise le WatchService pour surveiller les modifications sur le système de fichiers, ce qui implique que le JDK 1.7 ou postérieur est nécessaire. Sur Mac OSX, Gradle dépend du mécanisme de polling du système de fichiers qui est considéré comme inefficace et peut causer des deadlocks lorsqu'un grand nombre de fichiers est surveillé. La création de fichiers dans un répertoire cible d'un lien symbolique, la création/suppression de liens symboliques sur des répertoires et la modification/suppression de la cible d'un lien symbolique ne déclencheront pas une nouvelle construction.
Règles de Substitution de Dépendances
Les règles de substitution de dépendances permettent de remplacer une dépendance sur un projet avec un module externe, comme illustré dans le code suivant tiré du manuel utilisateur :
resolutionStrategy.dependencySubstitution { substitute project(":api") with module("org.utils:api:1.3") }
C'est utile dans le cadre d'une construction multi-projets, en permettant de télécharger certaines dépendances depuis un référentiel externe plutôt que de les construire.
Les substitutions peuvent être définies de manière opposée, en remplaçant un module externe avec un projet local. Cela pourrait être utile lorsque l'on tente de construire la version locale d'une dépendance dans le cadre d'un test. La substitution peut spécifier la version d'un module ou non :
resolutionStrategy.dependencySubstitution { substitute module("org.utils:api") with project(":api") substitute module("org.utils:util:2.5") with project(":util") }``` **Evènements de Progression** La méthode `addProgressListener(ProgressListener)` peut être utilisée pour enregistrer des abonnés à différents évènements de construction déclenchés lorsque le graphe de tâches est construit, lorsque l'exécution d'une tâche est démarrée/achevée, ou lorsque l'exécution d'un test est démarrée/achevée. **Tests Google** Gradle dispose maintenant d'un *plugin* qui fournit un support rudimentaire pour la compilation et l'exécution de [Tests Google](https://code.google.com/p/googletest/). Un meilleur reporting HTML, un retour en temps réel sur l'exécution du test et le support d'autres frameworks de test font partie des plans pour le futur. **Autres** Les autres nouvelles fonctionnalités de Gradle 2.5 sont : des dépendances par défaut plus simples, le support de la pré-compilation de l'en-tête et des améliorations du modèle de gestion. Un certain nombre de fonctionnalités ont été [dépréciées](https://docs.gradle.org/current/release-notes#deprecations) et un certain nombre de problèmes ont été [résolus](https://docs.gradle.org/current/release-notes#fixed-issues). Il existe également un certain nombre de modifications [potentiellement non rétrocompatibles](https://docs.gradle.org/current/release-notes#potential-breaking-changes).