1. Introduction

Public cible : Développeur débutant à intermédiaire avec Gradle.

Démarrer un nouveau projet de plugin Gradle peut sembler intimidant. Heureusement, Gradle fournit un assistant interactif puissant, la tâche init, qui génère une structure de projet complète, propre et prête à l’emploi. Ce guide vous montrera comment utiliser cet outil pour créer une base de plugin saine, en expliquera la structure et vous montrera comment lancer les premières tâches de build.

2. Étape 1 : Lancer l’assistant de projet

La commande gradle init est le point de départ. Elle lance un assistant en ligne de commande qui vous pose une série de questions pour configurer le projet.

Ouvrez votre terminal dans un dossier vide et lancez :

gradle init

L’assistant vous guidera. Voici les choix à faire pour un plugin Gradle écrit en Kotlin :

  1. Select type of project to generate: Choisissez Gradle plugin.

  2. Select implementation language: Choisissez Kotlin.

  3. Select build script DSL: Choisissez Kotlin.

  4. Project name: Entrez un nom pour votre projet (ex: site-baker).

  5. Plugin id: Donnez un identifiant unique à votre plugin (ex: com.cheroliv.site-baker).

  6. Plugin class: Spécifiez le nom de la classe d’implémentation (ex: com.cheroliv.SiteBakerPlugin).

Une fois terminé, Gradle génère une arborescence de fichiers complète.

init gradle
Figure 1. Diagramme du processus d’initialisation

3. Étape 2 : Comprendre la structure générée

L’assistant crée une structure de projet multi-modules, séparant le projet racine du code source du plugin lui-même.

.
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── plugin/
│   ├── build.gradle.kts
│   └── src/
│       ├── main/
│       │   └── kotlin/
│       │       └── com/cheroliv/SiteBakerPlugin.kt
│       ├── test/
│       │   └── kotlin/
│       │       └── com/cheroliv/SiteBakerPluginTest.kt
│       └── functionalTest/
│           └── kotlin/
│               └── com/cheroliv/SiteBakerPluginFunctionalTest.kt
└── settings.gradle.kts

3.1. Fichiers et dossiers clés

  • settings.gradle.kts : Ce fichier à la racine définit les modules inclus dans le build. Ici, il inclut le sous-projet plugin. [source,kotlin] ---- rootProject.name = "site-baker" include("plugin") ----

  • plugin/build.gradle.kts : C’est le cœur de la configuration de votre plugin. Il applique le plugin java-gradle-plugin, déclare les dépendances et configure les métadonnées du plugin. [source,kotlin] ---- plugins { java-gradle-plugin alias(libs.plugins.kotlin.jvm) }

        gradlePlugin {
            val siteBaker by plugins.creating {
                id = "com.cheroliv.site-baker"
                implementationClass = "com.cheroliv.SiteBakerPlugin"
            }
        }
        ----
    *   `src/main/` : Contient le code source de votre plugin.
    *   `src/test/` : Contient les tests unitaires. Ils s'exécutent rapidement et en isolation.
    *   `src/functionalTest/` : Contient les tests fonctionnels. Ces tests utilisent `GradleRunner` pour exécuter une version complète de Gradle sur un projet de test, simulant ainsi une utilisation réelle de votre plugin.

4. Étape 3 : Construire et tester le plugin

Le projet généré inclut le Gradle Wrapper (gradlew). C’est la manière recommandée d’exécuter Gradle, car elle garantit que tous les développeurs utilisent la même version, assurant des builds reproductibles.

4.1. Tâches de base

  • Construire le projet : Cette commande compile votre code, exécute tous les tests (unitaires et fonctionnels) et assemble le JAR de votre plugin. [source,bash] ---- ./gradlew build ----

  • Lancer toutes les vérifications : La tâche check est un alias qui exécute toutes les tâches de vérification, y compris test et functionalTest. [source,bash] ---- ./gradlew check ----

  • Exécuter uniquement les tests unitaires : Pour un feedback rapide pendant le développement. [source,bash] ---- ./gradlew test ----

La commande ./gradlew :test, qui cible explicitement le projet racine, échouera car ce dernier ne contient pas de tests. En revanche : * ./gradlew test fonctionne car Gradle exécute la tâche test sur tous les sous-projets qui la possèdent (ici, le module plugin). * ./gradlew :plugin:test est la commande la plus explicite pour lancer les tests du module plugin uniquement.

  • Exécuter uniquement les tests fonctionnels : Plus lents, ils sont utiles pour valider le comportement global. [source,bash] ---- ./gradlew functionalTest ----

Le résultat des tests est généré dans le dossier plugin/build/reports/tests/. Vous pouvez ouvrir le fichier index.html dans votre navigateur pour un rapport détaillé.

5. Conclusion

En quelques minutes, gradle init vous a fourni une base de projet solide, moderne et complète pour le développement de votre plugin. Vous disposez d’une structure claire, de tests unitaires et fonctionnels préconfigurés, et d’un système de build reproductible grâce au Gradle Wrapper.

Vous êtes maintenant prêt à ouvrir le fichier SiteBakerPlugin.kt et à commencer à y ajouter la logique métier de votre plugin !