Gradle est un outil de constructino de projets comparable à Apache Maven, mais conçu pour offrir davantage de flexibilité, de performance et de contrôle sur la gestion des dépendances.
Fonctionnalités clés
- Extensibilité : Gradle repose sur un modèle ouvert qui permet d’adapter le processus de build à presque tous les types de projets, y compris ceux en C/C++.
- Performance : Grâce à des mécanismes comme le cache incrémental et le daemon, Gradle peut être jusqu’à 100 fois plus rapide que Maven dans certains scénarios.
- Gestion fine des dépendances : Il permet de définir des configurations personnalisées (comme
implementation,api, etc.), ce qui améliore la modularité et réduit les temps de build.
Concepts fondamentaux
- Projet : Un projet Gradle représente une unité logicielle (application, bibliothèque). Il peut être simple (un seul module) ou multi-modules (un projet racine avec plusieurs sous-projets).
- Dépendances : Les dépendances externes sont déclarées dans les scripts de build et résolues automatiquement par Gradle depuis des dépôts comme Maven Central.
- Scripts de build : Écrits en Groovy DSL ou Kotlin DSL, ces fichiers (
build.gradleoubuild.gradle.kts) définissent la configuration du projet et ses tâches. - Tâches (tasks) : Unités d’exécution atomiques (ex. : compilation, tests, packaging). Chaque tâche peut dépendre d’autres tâches.
- Plugins : Modules qui étendent les capacités de Gradle en ajoutant des tâches prédéfinies ou des conventions (ex. : plugin Java, plugin application).
Structure typique d’un projet Gradle
mon-projet/
├── .gradle/ # Cache spécifique au projet
├── gradle/
│ ├── libs.versions.toml # Gestion centralisée des versions
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew # Script Linux/macOS
├── gradlew.bat # Script Windows
├── settings.gradle # Définit les sous-projets
├── app/
│ ├── src/
│ │ ├── main/
│ │ └── test/
│ └── build.gradle # Configuration du module
└── build/ # Résultats de la compilation
Répertoires utilisés par Gradle
Répertoire utilisateur (GRADLE_USER_HOME) : Par défaut ~/.gradle (Linux/macOS) ou C:\Users\<USER>\.gradle (Windows). Il contient :
caches/: artefacts téléchargés, métadonnées de dépendancesdaemon/: processus longue durée pour accélérer les buildswrapper/: distributions téléchargées via Gradle Wrapper
Répertoire racine du projet : Contient le code source, les scripts de build et les artefacts générés.
Mise en œuvre pratique
Initialisation d’un projet Java
Pour créer un projet Java avec Gradle (DSL Groovy) :
mkdir demo-gradle && cd demo-gradle
gradle init --type java-application --dsl groovy
Lors de l’exécution, Gradle utilise le Wrapper. Si le fichier gradle-x.x-bin.zip n’est pas présent localement, il tente de le télécharger. En cas de restriction réseau, placez manuellement l’archive dans :
$GRADLE_USER_HOME/wrapper/dists/gradle-x.x-bin/<hash>/
Ajout d’un nouveau module
Pour ajouter un module nommé client, créez un dossier client à la racine, puis modifiez settings.gradle :
rootProject.name = 'demo-gradle'
include 'app'
include 'client'
Gestion des dépendances via libs.versions.toml
Déclarez les versions et bibliothèques dans gradle/libs.versions.toml :
[versions]
okhttp = "4.12.0"
[libraries]
okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
Puis référencez-les dans client/build.gradle :
dependencies {
implementation libs.okhttp
}
Utilisation de plugins
Plugin Java – pour générer un JAR exécutable :
plugins {
id 'java'
}
jar {
manifest {
attributes 'Main-Class': 'com.example.Main'
}
from {
configurations.runtimeClasspath.files.collect { zipTree(it) }
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
Plugin Appplication – pour créer une distribution exécutable :
plugins {
id 'application'
}
application {
mainClass = 'com.example.Main'
}
Exécutez ./gradlew distZip pour générer une archive dans build/distributions/.
Notes importantes
La compatibilité entre les versions de Gradle et celles de Java est stricte. Consultez toujours la documentation officielle correspondant à votre version (ex. : Gradle 8.5). La documentation en chinois ne précise souvent pas les versions, ce qui peut entraîner des erreurs de configuraton.