Chapitre Présentation du langage Groovy
Méta-Programmation avec Groovy et Gradle
Explorer les concepts de méta-programmation en utilisant Groovy et Gradle pour personnaliser dynamiquement le comportement du build.
Dernière modification : Dec 08 , 2024
Instructions
-
Modification Dynamique d'une Tâche :
- Créez une tâche Gradle simple appelée "bonjour" qui imprime un message de salutation.
- Utilisez la méta-programmation pour modifier dynamiquement le comportement de cette tâche. Par exemple, faites en sorte qu'elle affiche un message différent en fonction de certains critères (ex. s'il est exécuté en mode "debug" ou "release").
-
Extension Dynamique du Modèle :
- Créez une classe Groovy appelée
ConfigExtension
qui étend le modèle de projet Gradle en ajoutant une propriété supplémentaire, par exemple,versionSuffix
. - Utilisez la méta-programmation pour ajouter dynamiquement cette extension au projet.
- Affichez la valeur de la propriété
versionSuffix
dans votre script Gradle.
- Créez une classe Groovy appelée
-
Méta-Programmation pour Gérer les Dépendances :
- Créez une méthode méta-programmée qui, lorsqu'elle est appelée, ajoute une dépendance à un module externe spécifié.
- Utilisez cette méthode pour ajouter dynamiquement une dépendance tierce à votre projet.
-
Personnalisation Dynamique d'une Tâche avec une Closure :
- Créez une tâche Gradle qui utilise une closure pour définir son comportement.
- Utilisez la méta-programmation pour permettre aux utilisateurs de votre script d'ajouter dynamiquement du code à cette closure depuis d'autres scripts Gradle.
Exemple de structure du projet
mon-projet/
|-- build.gradle
|-- src/
|-- main/
|-- java/
|-- resources/
Exemple de solution attendue
// build.gradle
// Modification dynamique d'une tâche
task bonjour {
doLast {
if (project.hasProperty("mode") && project.mode == "debug") {
println("Bonjour en mode debug !")
} else {
println("Bonjour en mode release !")
}
}
}
// Extension dynamique du modèle
class ConfigExtension {
String versionSuffix
}
// Méta-programmation pour ajouter l'extension au modèle
project.extensions.create("config", ConfigExtension)
println("Version Suffix: ${project.config.versionSuffix}")
// Méta-programmation pour gérer les dépendances
def addExternalDependency(String module) {
dependencies {
implementation module
}
}
// Ajout dynamique d'une dépendance tierce
addExternalDependency("com.google.guava:guava:30.1-jre")
// Personnalisation dynamique d'une tâche avec une closure
def customTask = task('customTask') {
doLast {
println("Tâche personnalisée exécutée !")
}
}
// Méta-programmation pour permettre aux utilisateurs d'ajouter du code dynamiquement
customTask.doLast {
if (project.hasProperty("additionalCode")) {
additionalCode.call()
}
}