--- title: 🐘 Gradle tags: android, campus numerique, kotlin, dim --- ![Gradle](https://cdn.iconscout.com/icon/free/png-128/gradle-1-285287.png) Gradle est un système d'automatisation de build open-source qui s'appuie sur les concepts d'Apache Ant et d'Apache Maven. Il introduit un langage spécifique au domaine (DSL) basé sur Groovy au lieu du XML utilisé par Apache Maven pour déclarer la configuration du projet. Gradle a été conçu pour les constructions multi-projets, qui peuvent devenir très volumineuses. Il supporte les builds incrémentiels en déterminant intelligemment quelles parties de l'arborescence de compilation sont à jour. Gradle peut : - Construire des classes par réflexion de code - Exécuter des scripts / du code - Ecrire dans des fichiers - Déployer des builds - Faire le CI - Gérer les dépendances - Exécuter les tests - Faire le café quand un build a réussi - Build ton programme automatiquement quand l'ISS passe au dessus de ta tête. ![](https://media.giphy.com/media/U56UKYAO8ToW8ycuDe/giphy.gif) **Les possibilités sont infinies** > **Note 📝:** Vous pouvez voir Gradle comme un genre de `NPM` ou `Composer`, mais en beaucoup beaucoup plus complet et complexe. Le principe de base reste d'ajouter des dépendances à votre programme, de gérer tout cela et de compiler l'ensemble de la manière la plus efficace possible. 🤓 **Gradle** intervient seulement à la compilation et pas au run, il n'est donc pas possible que Gradle agisse sur le programme une fois que celui ci est lancé ## Kotlin + Gradle Pour faire suite au support précédent on va commencer à se faciliter la vie et utiliser Gradle pour gérer la compilation et le run de notre programme. ### Getting started 1. On va suivre gentiment les [instructions d'installation de Gradle](https://gradle.org/install/). 2. Une fois faites, créez un dossier de travail : `/myKotlinApp` par exemple 3. Nous allons initialiser gradle : ```sh $ cd myKotlinApp $ gradle init ``` 5. Choisissez `kotlin-application` puis `groovy`, laissez le reste par défaut. 6. Ouvrez le dossier avec votre éditeur de code préféré (Sublime text, VS Code, ou n'importe quel éditeur de **texte**), n'utilisez pas `intellijea` ou un IDE pour le moment. > **Note 📝:** Groovy est un langage supporté par Gradle pour sa configuration. C'est confusant, mais Kotlin est aussi un langage supporté par Gradle. Sur la documentation de Gradle vous remarquerez qu'il est possible d'avoir les exemples dans les 2 langages. #### Vous devriez obtenir une structure de dossier comme suit : ```shell . ├── build // Les fichiers généré par le build time ├── build.gradle //la configuration de votre Gradle ├── gradle │ └── wrapper //Executable wrapper ├── gradlew //Gradle Wrapper ├── gradlew.bat //Pour windows ├── settings.gradle └── src ├── main //Votre code va être ici └── test //Vos test unitaires et fonctionnels seront là ``` :::info **Question 1** 👉 Qu'est ce que le `Gradle Wrapper` ? A quoi sert-il ? ::: ### Votre première "Task" ✅ Gradle est un système d'automatisation. Vous définissez une tâche, puis vous la lancez via une commande. Plutôt simple. Allez dans le fichier `build.gradle` et copiez le code suivant : ```groovy= //Déclaration de la tache nommée "hello" task hello { doLast { println 'Hello world!' } } ``` Maintenant lancez dans votre terminal : ```shell $ ./gradlew tasks --all ``` :::info **Question 2** 👉 Lancez la task `hello` que nous venons de créer. Comment avez vous fait ? ::: Voilà ! Vous venez de programmer une tâche dans Gradle. Gradle peut faire beaucoup de choses de manière automatique. Tout est une `task` ou une `variable` dans Gradle. ### Lancer mon Kotlin 🚀 Puisque vous avez défini lors du `gradle init` que c'était une application Kotlin, Gradle a déjà tout configuré pour vous. Il a même créé un `Hello world` dans `/src/main/myKotlinApp/App.kt` **Sous le capot 🚙:** En réalité, Gradle a appliqué un template d'application qui comprend une structure de dossiers et un set de `plugin` permettant de réaliser rapidement une application Kotlin JVM. :::info **Question 3** 👉 Qu'est ce qu'un plugin Gradle ? Quels sont les plugins déjà appliqué à cette configuration Gradle ? A quoi servent-ils ? **Faites valider par l'enseignant** ::: Vous trouverez de l'aide sur les plugins basiques de Gradle directement [dans la documentation de Gradle ici.](https://docs.gradle.org/current/userguide/userguide.html) ![](https://i.imgur.com/4eXhXh9.png) :::info **Question 4** 👉 Lancez l'application Kotlin, servez vous de ce que vous avez appris avant. Comment avez vous fait ? ::: :::info **Question 5** 👉 Lancez les tests unitaires de votre application à présent. Quelle commande avez vous utilisé ? ::: ### Documenter votre code avec Gradle - [Installez le plugin "dokka" et lancer le](https://github.com/Kotlin/dokka) - Ajouter des [commentaires KDoc complet](https://kotlinlang.org/docs/reference/kotlin-doc.html) - Relancez la tâche Gradle `dokka` :::info **Question 6** 👉 Faites valider votre documentation, elle doit s'afficher dans votre navigateur web. ::: ## Voilà ! Gradle est un super outil à tout faire pour la vie du développeur. Vous pouvez l'utiliser pour faire des choses simples qui ne nécessitent un langage de programmation complet : - Traiter des fichiers en masse (renommage, déplacement, etc.) - Envoyer des données dans une base de données depuis des fichiers (ETL) - Redimensionner en masse des images automatiquement (c'est ce qui est utilisé par Android Studio pour les assets android par exemple) - etc. Sky is the limit ☁️ ## Point culture numérique : Kotlin Multiplateforme https://kotlinlang.org/docs/reference/multiplatform.html