Dernière modification : Dec 08 , 2024
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.
  • 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()
    }
}