Deux projets :
plugin-gradle :
Le projet contient les plugins gradle créés lors du coding dojo.
Il y a deux plugins :
com.serli.dojo.hello: fournit des tâches pour afficher des messages en ASCII Art.com.serli.dojo.hook: un plugin qui permet de brancher des git hooks appelant des tâches gradle.
plugin-gradle-demo-app :
Il s'agit d'un projet gradle permettant de tester les plugins créés. Il contient une application Spring boot "vide".
Il n'y a qu'un test unitaire qui permet de tester les git hooks.
Pour publier les plugins gradle, on va simplement utiliser le repository maven local dans cet exemple :
cd plugin-gradle
gradlew publishToMavenLocalLe plugin ayant été publié dans le mavenLocal, on va pouvoir l'ajouter au projet plugin-gradle-demo-app :
buildscript {
repositories {
mavenLocal()
}
dependencies {
classpath("com.serli.dojo:plugin-gradle:0.0.1-SNAPSHOT")
}
}
apply plugin: 'com.serli.dojo.hello'Le plugin fournit une tâche gradle hello permettant d'afficher un message dans la console.
C'est complètement inutile et donc absolument nécessaire :happy.
Par défault, le message affichait est Hello from GreetingPlugin.
Ce message peut être configuré par une extension greeting (voir ci-dessous).
λ gradlew tasks
> Task :tasks
------------------------------------------------------------
Tasks runnable from root project
------------------------------------------------------------
...
Dojo tasks
----------
hello - Produces a greeting
λ gradlew hello
Starting a Gradle Daemon, 1 busy and 1 stopped Daemons could not be reused, use --status for details
> Task :hello
_ _ _ _ __ ____ _ _ ____ _ _
| | | | ___ | | | | ___ / _| _ __ ___ _ __ ___ / ___| _ __ ___ ___ | |_ (_) _ __ __ _ | _ \ | | _ _ __ _ (_) _ __
| |_| | / _ \ | | | | / _ \ | |_ | '__| / _ \ | '_ ` _ \ | | _ | '__| / _ \ / _ \ | __| | | | '_ \ / _` | | |_) | | | | | | | / _` | | | | '_ \
| _ | | __/ | | | | | (_) | | _| | | | (_) | | | | | | | | |_| | | | | __/ | __/ | |_ | | | | | | | (_| | | __/ | | | |_| | | (_| | | | | | | |
|_| |_| \___| |_| |_| \___/ |_| |_| \___/ |_| |_| |_| \____| |_| \___| \___| \__| |_| |_| |_| \__, | |_| |_| \__,_| \__, | |_| |_| |_|
|___/ |___/L'extension permet de configurer le plugin hello en fournissant un message alternatif au message par défault Hello from GreetingPlugin.
Pour ce faire, on va ajouter au build.gradle du projet plugin-gradle-demo-app :
greeting {
message = "Hi, Serli Dojo"
}Ce message est utilisé par la tâche hello.
Le plugin fournit aussi une implémentation d'une tâche Greeting permettant d'ajouter autant de message que souhaité dans un projet.
Par exemple, on peut ajouter deux tâches say-hello pour dire bonjour en anglais et son pendant dis-bonjour pour le français.
tasks.register("say-hello", com.serli.dojo.hello.Greeting) {
group = "Dojo"
description = "Produces a greeting in english with recipient and message"
greeting = "Hello"
recipient = "Serli Dojo"
}
tasks.register("dis-bonjour", com.serli.dojo.hello.Greeting) {
group = "Dojo"
description = "Produces a greeting in french with recipient and message"
greeting = "Bonjour"
recipient = "Serli Dojo"
}
Le plugin ayant été publié dans le mavenLocal, on va pouvoir l'ajouter au projet plugin-gradle-demo-app :
buildscript {
repositories {
mavenLocal()
}
dependencies {
classpath("com.serli.dojo:plugin-gradle:0.0.1-SNAPSHOT")
}
}
apply plugin: 'com.serli.dojo.hook'Cette tâche va générer des scripts git hooks dans le dossier .git/hooks pour chaque hook possible.
Le fichier hook contient le script suivant :
#!/bin/sh
hookName=`basename "$0"`
gitParams="$*"
./gradlew $hookName -Pparams="$gitParams" --quiet --console=plainCe script appelle la tâche gradle correspondant au nom du script invoqué.
Par exemple, pour le script pre-commit, on va lancer la commande gradlew pre-commit ....
Le plugin ajoute des tâches pour chaque hook possible.
De cette façon, on peut se brancher sur le hook simplement en utilisant dependsOn :
// build project on pre-commit hook
tasks.named("pre-commit").configure {
it.dependsOn tasks.named("build")
}La documentation gradle :
On utilise la librarie jfiglet pour générer du texte en ASCII Art.