Archives Wild Code School
Java

Gradle

Quête 3 sur 43 · 1 image archivée

Gradle

gradle est un outil pour construire des programmes ou des bibliothèques Java. C'est l'outil de build (compilation et assemblage du projet) principal pour le développement Android et il est pris en charge dans Android Studio.

Gradle

Contrairement à maven ou ant, gradle utilise un DSL (domain specific language, un mini-langage spécialisé) au lieu du XML pour te laisser définir les réglages de ton projet. Le DSL de gradle prend en charge groovy ou kotlin.

🤓 À la fin de cette quête, tu sauras :

✅ Savoir ce qu'est gradle et comment il fonctionne ✅ Savoir comment installer gradle sur ton ordinateur ✅ Savoir comment construire des programmes et des bibliothèques Java avec gradle


Historique et alternatives

Une grosse différence entre Gradle et maven ou ant, c'est l'utilisation d'un DSL basé sur un vrai langage de programmation au lieu du XML. Gradle suit le principe convention over configuration (la convention plutôt que la configuration) de ** maven**. Le DSL de gradle est basé sur groovy mais gradle a introduit kotlin comme deuxième langage. kotlin est un langage de programmation populaire pour la JVM, surtout pour les projets basés sur Android.

Installer gradle

Pour installer la dernière version de gradle (ou n'importe quelle version propre à un projet), tu télécharges la distribution binaire depuis le site de Gradle. Tu peux aussi utiliser un package manager (gestionnaire de paquets), mais on ne couvrira pas ce type d'installation dans cette quête.

↗
Gradle
gradle.org

Choisis l'archive binaire .zip dans la section Downloads et extrais les fichiers avec

bash
mkdir -p ~/Bin/gradle
unzip -d ~/Bin/gradle gradle-7.1.1-bin.zip

Tu peux toujours déplacer le dossier gradle plus tard. Ajoute le dossier bin/ de l'archive gradle extraite à ton path (variable qui liste les dossiers où le système cherche les programmes) pour t'éviter de toujours fournir le chemin complet vers le binaire gradle.

Attention

gradle-7.1.1.zip est la version actuelle de gradle au moment où ces lignes sont écrites. La version a peut-être changé pour une révision plus récente. La meilleure option pour le téléchargement est généralement la dernière version stable.

Pour vérifier que ton installation a réussi, tape

bash
gradle --version

en ligne de commande. Gradle affichera la version actuelle. Tu es maintenant prête à utiliser l'outil de build gradle.

build.gradle

Le fichier build.gradle est utilisé par gradle pour décrire le projet. Dans le fichier build.gradle, tu définis le type de projet que tu veux construire à l'aide de plugins (modules qui ajoutent des fonctionnalités). Pour un projet Java, on inclut le plugin 'java'.

C'est tout ce que tu as à faire pour compiler tes sources Java et créer un fichier .jar. Pour créer un fichier .jar qui soit exécutable, on doit préciser la classe principale (main class) dans le fichier build.gradle.

apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.wildcodeschool.quests.gradle.MyApplication'
    }
}

Avant de construire notre premier exécutable Java avec gradle, on doit fournir à la classe Java com.wildcodeschool.quests.gradle.MyApplication une méthode public static void main(String[] args).

Fichiers et dossiers

Alors qu'avec Java tu es libre d'organiser tes fichiers et tes dossiers, on doit respecter une structure de fichiers et de dossiers précise quand on utilise gradle. Dans le dossier de notre projet, il y a un dossier src pour les sources et un dossier build pour les binaires (fichiers .class, applications, bibliothèques, ...) créés par gradle.

bash
+ my-first-gradle-project
    + -- src
        + -- main
            + -- java
                 MyApplication.java
            + -- resources
                 MyApplication.txt
        + -- test
            + -- java
                 MyApplicationTest.java
            + -- resources
                 MyApplicationTest.txt
    + -- build
        + -- classes
             MyApplication.class

        my-first-gradle-project.jar

    build.gradle

Le dossier src contient les sources Java dans le dossier main/java et tous les autres fichiers de ressources dans le dossier resources. Les autres ressources peuvent inclure des images utilisées pour des icônes, des fichiers texte ou tout ce qui n'est pas une source Java nécessaire pour compiler le programme ou la bibliothèque.

Le dossier test dans le dossier src sert pour les tests. Les tests sont couverts dans une autre quête, donc on ne rentrera pas dans les détails ici.

Le dossier build est utilisé par gradle pour stocker les binaires créés quand ton projet est construit. Il contiendra les classes Java compilées (fichiers .class) et l'archive regroupant toutes les classes Java dans une archive Java (fichier .jar).

Info

Tu peux changer les valeurs par défaut des fichiers et des dossiers pour gradle, mais ça rendrait ton projet bizarre. La structure de dossiers présentée est équivalente à ce que tu attends d'un projet maven et elle est utilisée dans gradle pour les projets Java standards. Pour le développement Android, la structure est un peu différente.

Construire avec gradle

Pour construire ton programme avec gradle, tu invoques la task (tâche) build depuis la ligne de commande avec

bash
gradle build

Projets et tasks gradle

Gradle prend en charge les builds multi-projets, mais on en reste à un seul projet pour l'instant. Pour chaque projet, il y a des tasks prédéfinies que tu peux utiliser pour construire ton projet. Pour voir la liste de toutes les tasks disponibles, lance

gradle tasks --all

Tu peux aussi ajouter tes propres tasks et les lancer. Une task peut être aussi simple que l'extrait de code suivant

task helloGradle {
    doLast {
        println 'Hello gradle'
    }
}

Pour lancer ta task, invoque la task avec gradle depuis la console

bash
gradle helloGradle

Gradle prend en charge beaucoup de tasks et de plugins qui ajoutent encore plus de tasks. C'est aussi très facile de créer tes propres tasks et comme gradle utilise un langage de programmation (groovy ou kotlin) pour le script de build, c'est facile d'écrire tes propres tasks une fois que tu es à l'aise avec l'un des langages pris en charge.

Gradle fournit une task nommée init qui te posera des questions sur tes préférences et mettra en place un nouveau projet ainsi que les répertoires pour les fichiers sources. Le résultat inclut quelques fichiers et dossiers supplémentaires et n'est pas compatible avec les dossiers par défaut attendus par maven. La structure de dossiers fournie par init est généralement utilisée pour les projets Android. Tu peux voir cette structure comme celle par défaut pour gradle, même si gradle fonctionne très bien avec la structure attendue par maven.

Dépendances

Ajouter une dependency (dépendance, bibliothèque externe dont dépend le projet) dans gradle est simple. Pour donner un exemple, on va inclure le repository (dépôt où sont stockées les bibliothèques) groovy-all, même si on ne l'utilise même pas.

dependencies {
    implementation: 'org.codehaus.groovy:groovy-all:3.0.8'
}

Repositories

Un repository sert à résoudre les dependencies. C'est courant d'utiliser le repository maven central avec gradle, mais ton entreprise utilise peut-être un repository différent.

repositories {
    mavenCentral()
}

Gradle prend en charge un ensemble de méthodes pour préciser le ou les repositories à utiliser. Tu devrais vérifier les règles de ton entreprise concernant comment et quel repository utiliser dans ton projet.

💪 Défi

Crée un fichier build.gradle pour un nouveau projet Java et construis ton programme

↗
Crée un programme Java exécutable

Ton build.gradle doit fonctionner et créer un fichier .jar contenant un programme Java exécutable. Tu devras préciser la main class (classe principale) dans le fichier build.gradle et gradle ajoutera cette entrée au fichier META-INF/MANIFEST.MF inclus dans le fichier .jar pour toi.

Le programme Java peut simplement afficher un message "Hello World" à l'écran, il doit juste être un programme Java exécutable.

Gradle

gradle is a tool to build java programs or libraries. It is the primary build tool for Android software development and is supported in Android Studio.

Gradle

In contrast to maven or ant, gradle uses a DSL instead of XML to let you specify the settings of your project. The gradle DSL supports groovy or kotlin.

🤓 By the end of this quest, you will:

✅ Know what gradle is and how it works ✅ Know how to install gradle on your computer ✅ Know how to build Java programs and libraries with gradle


History and alternatves

A big difference between Gradle and maven or ant is the use of a DSL based on a real programming language instead of XML. Gradle follows the convention over configuration principle of ** maven**. The gradle DSL is based on groovy but gradle introduced kotlin as a second language. kotlin is a popular programming language for the JVM, especially for Android based projects.

Install gradle

To install the latest (or any project specific) version of gradle, you download the binary distribution from the Gradle Website. You can also use a package manager but we will not cover that kind of installation in this quest.

↗
Gradle
gradle.org

Choose the binary .zip archive from the Downloads section and extract the files with

bash
mkdir -p ~/Bin/gradle
unzip -d ~/Bin/gradle gradle-7.1.1-bin.zip

You can still move around the gradle folder later. Add the bin/ folder from the extracted gradle archive to your path to save from you always providing the full path to the gradle binary.

Attention

gradle-7.1.1.zip is the current release of gradle at the time of this writing. The version may have changed to a later revision. The best option for the download is usually the latest stable version.

To verify that your installation was successful, type

bash
gradle --version

at the command line. Gradle will print the current version. You are now ready to use the gradle build tool

build.gradle

The build.gradle files is used by gradle to specify the project. In the build.gradle file you specify the kind of project you want to build using plugins. For a Java project, we include the 'java' plugin.

This is everything you have to do to compile your Java sources and create a .jar file. To create a .jar file that is executable, we have to specify the main class in the build.gradle file.

apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.wildcodeschool.quests.gradle.MyApplication'
    }
}

Before we build our first Java executable with gradle, we have to provide the Java class com.wildcodeschool.quests.gradle.MyApplication with a public static void main(String[] args) method.

Files and folders

While you are free to organize your files and folders with Java, we have to adhere to a specified structure of files and folders when we use gradle. Within the folder for our project, there is a src folder for the sources and a build folder for the binaries (.class files, applications, libraries, ...) created by gradle.

bash
+ my-first-gradle-project
    + -- src
        + -- main
            + -- java
                 MyApplication.java
            + -- resources
                 MyApplication.txt
        + -- test
            + -- java
                 MyApplicationTest.java
            + -- resources
                 MyApplicationTest.txt
    + -- build
        + -- classes
             MyApplication.class

        my-first-gradle-project.jar

    build.gradle

The src folder contains Java sources in the main/java folder and any other resource files in the resources folder. Other resources could include images used for icons or text files or anything else that is not a Java source required to compile the program or library.

The test folder in the src folder is used for tests. Testing is covered in a different Quest so we will not go into details here.

The build folder is used by gradle to store the binaries created when your project is build. It will contain the compiled Java classes (.class files) and the archive with all combined Java classes in a Java archive (.jar file).

Info

You can change the defaults for files and folders for gradle but that would make your project look odd. The structure of folders shown is equivalent to what you expect from a maven project and is used in gradle for standard Java projects. For Android development, the structure is a little bit different.

Build with gradle

To build your program with gradle you invoke the build task from the command line with

bash
gradle build

Gradle projects and tasks

Gradle supports multi-project builds but we stick with a single project for now. For every project, there are pre-defined tasks that you can use to build your project. To see a list of all available tasks, run

gradle tasks --all

You can also add your own tasks and run them. A task can be as simple as the following code snippet

task helloGradle {
    doLast {
        println 'Hello gradle'
    }
}

To run your task, invoke the task with gradle from the console

bash
gradle helloGradle

Gradle supports a lot of tasks and plugins that add even more tasks. It is also very easy to create your own tasks and as gradle uses a programming language (groovy or kotlin) for the build script, it is easy to write your own tasks once you are familiar with any of the supported languages.

Gradle provides a task named init that will ask you about your preferences and set up a new project and directories for the source files. The result includes some additional files and folders and is not compatible with the default folders expected by maven. The structure of folders provided by init is usually used for Android projects. You can think of this structure as the default for gradle while gradle works fine with the structure expected by maven.

Dependencies

Adding a dependency in gradle is simple. To provide an example, we will include the groovy-all repository, though we do not even use it.

dependencies {
    implementation: 'org.codehaus.groovy:groovy-all:3.0.8'
}

Repositories

A repository is used to resolve dependencies. It is common to use the maven central repository with gradle but your company may use a different repository.

repositories {
    mavenCentral()
}

Gradle supports a collection of methods to specify the repository or repositories to use. You should check with your companies rules on how and which repository to use in your project.

💪 Challenge

Create a build.gradle file for a new Java project and build your program

↗
Create a runnable Java program

Your build.gradle should work and create a .jar file with an executable Java program. You will have to specify the main class in the build.gradle file and gradle will add that entry to the META-INF/MANIFEST.MF file included in the .jar file for you.

The Java program can simply print a "Hello World" message to the screen - it just has to be a runnable Java program.