• 15 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 28/01/2019

Installez et utilisez votre première dépendance

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Java est composé de nombreux outils intégrés. Nous n'en avons vu qu'une toute petite partie. Au fur et à mesure de votre apprentissage, vous finirez par en connaître beaucoup.

À tous ces outils intégrés dans Java, s'ajoutent tous ceux développés par la communauté ! Des milliers d'outils sont disponibles sur internet. Ils sont développés par des équipes de passionnés, des entreprises ou encore des développeurs indépendants. Nous allons voir dans ce chapitre comment en utiliser un.

Pour récupérer une version propre du projet prêt pour ce chapitre, vous pouvez importer le projet git suivant : MyMenu - Step 10.

Maven

Maven est un outil permettant de gérer la construction et les dépendances de vos projets Java. Un cours complet dédié à ce sujet est présent sur OpenClassrooms. Nous allons introduire ici rapidement cet outil. Nous l'utiliserons pour utiliser une dépendance externe permettant de gérer les CSV !

Commençons par convertir notre projet en projet Maven. Clic droit sur votre projet puis AddFramework Support...

Ajouter un framework
Ajouter un framework

Maintenant, cochez Maven puis faites OK

Ajoût Maven
Ajoût Maven

Un nouveau fichier  pom.xml  vient d'être créé à la racine de votre projet. Ce fichier est au format xml. Il doit contenir à peu près ceci : 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>groupId</groupId>
   <artifactId>MyMenu</artifactId>
   <version>1.0-SNAPSHOT</version>

  
</project>

Ce fichier contient pour l'instant :

  • des informations de configuration Maven ;

  • des informations sur votre projet.

Dans le fichier OrderReader vous pouvez remarquer une erreur :

Erreur Files
Erreur Files

La solution proposée est la suivante :

Solution Level Java
Solution Level Java

Choisissez cette solution. Par défaut, Maven considère que les projets Java sont en version Java 5. Nous utilisons des outils venant de la version 8. Cette solution va configurer la version en Java 8.

Si vous regardez votre pom.xml, des lignes ont été ajoutées pour mettre le projet en Java 8.

<build>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
           <configuration>
               <source>1.8</source>
               <target>1.8</target>
           </configuration>
       </plugin>
   </plugins>
</build>

Les dépendances

Le site Maven Repository regroupe la grande majorité des dépendances disponibles pour Maven.

Qu'appelle t-on une dépendance ?

Vous l'avez compris, une dépendance est un ensemble de code avec une fonctionnalité précise que vous allez utiliser dans votre projet.

Il en existe deux grand types :

  • les Libraries : Une Library est un outil avec une fonctionnalité bien spécifique. Par exemple : lire et écrire dans un fichier CSV, envoyer un fichier sur un serveur distant. C'est un outil qui se greffe facilement à n'importe quel projet.

  • les Frameworks : Un Framework est un outil beaucoup plus complet, qui regroupe souvent beaucoup de Libraries. Généralement, un Framework change complètement l'organisation du code et doit être pensé dès le début du projet. En Java, l'un des plus connus est Spring. C'est un Framework permettant de mettre en place des projets Web.

Nous allons utiliser la Library csv-common présente sur mvnrepository. La dernière version au moment où j'écris ce cours est la 1.5. Nous allons utiliser cette version : voici sa page mvnrepository.

Sur la page vous voyez :

dépendance csv-common
dépendance csv-common

Copiez ce morceau de code xml, il va aller dans notre fichier pom.xml.

Dans votre fichier xml, ajoutez la balise  <dependencies></dependencies> . Elle sert à stocker l'ensemble de vos dépendances. Enfin copiez le code xml que vous venez de récupérer à l'intérieur de ces balises. Cela donne :

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>groupId</groupId>
   <artifactId>MyMenu</artifactId>
   <version>1.0-SNAPSHOT</version>
   
   <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

   <dependencies>
       <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-csv -->
       <dependency>
           <groupId>org.apache.commons</groupId>
           <artifactId>commons-csv</artifactId>
           <version>1.5</version>
       </dependency>
   </dependencies>
</project>

Normalement une petite fenêtre s'affiche en bas de IntelliJ :

Importer changements dans Maven
Importer changements dans Maven

IntelliJ intègre parfaitement Maven et vous propose différents raccourcis pour l'utiliser. Cliquez sur Import Changes. Attendez la fin du chargement.

Regardez la partie External Libraries de votre projet : la librarie csv-common y est ajoutée.

csv-common dans les librairies
csv-common dans les librairies

Utilisez csv-common

Nous allons utiliser csv-common pour modifier notre programme  OrderReader . Sur le site officiel de csv-common on trouve sa documentation.

Il y a beaucoup d'exemples, quand on débute c'est parfois compliqué de trouver le bon. Nous cherchons la façon de lire un fichier csv dans lequel il y a des titres (header en anglais).

C'est donc la solution Header auto detection qui nous intéresse :

Reader in = new FileReader("path/to/file.csv");
Iterable<CSVRecord> records = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in);
for (CSVRecord record : records) {
    String id = record.get("ID");
    String customerNo = record.get("CustomerNo");
    String name = record.get("Name");
}

Quelques explications sur le code :

  • On utilise un  Reader pour lire le fichier et non le combot  Path / Files.read.

  • Les lignes du csv sont ici appelées  CSVRecord.

  • Ces lignes sont stockées dans un type de tableau appelé  Iterable.

Voici notre application modifiée avec ce code :

package com.ocr.anthony;

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class OrderReader {
    public void read() {
        String[] menus = {"Menu Poulet", "Menu Boeuf", "Menu Végétarien"};
        String[] side = {" avec des légumes frais", " avec des frites", " avec du riz"};
        String[] sideVegetarian = {" avec du riz", " sans riz"};
        String[] drink = {" et avec de l'eau plate", " et avec de l'eau gazeuse", " et avec du soda"};
        try {
            Reader in = new FileReader("order.csv");
            Iterable<CSVRecord> records = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in);
            for (CSVRecord record : records) {
                int nbMenu = Integer.valueOf(record.get("menu"));
                int nbSide = Integer.valueOf(record.get("accompagnement"));
                int nbDrink = Integer.valueOf(record.get("boisson"));
                String orderLine = menus[nbMenu - 1];
                if (nbMenu == 3) //vegetarian menu
                    orderLine += sideVegetarian[nbSide - 1];
                else
                    orderLine += side[nbSide - 1];
                if (nbDrink == -1)
                    orderLine += " et sans boisson";
                else
                    orderLine += drink[nbDrink - 1];
                System.out.println(orderLine);
            }
        } catch (FileNotFoundException e) {
            System.out.println("Impossible de trouver le fichier order.csv");
        } catch (IOException e) {
            System.out.println("Erreur durant la lecture du fichier order.csv");
        }
    }

    public static void main(String[] args) {
        OrderReader orderReader = new OrderReader();
        orderReader.read();
    }
}

Comme d'habitude quelques explications. Le  try/catch englobe une grosse partie de code et possède plusieurs catchs différents pour différents types d'exceptions.

Le code n'est pas forcément plus lisible ou plus court. On a utilisé ici une Library dont vous comprenez facilement le code qu'elle cache.

Cette Library ne nous aide pas vraiment et ne nous fait pas gagner beaucoup de temps.

Durant votre carrière de développeur vous aurez l'occasion de découvrir de nombreuses Libraries, dont certaines très complexes (par exemple, des Libraries pour générer des jeux en 3D).

C'est en connaissant de mieux en mieux les outils inclus dans Java et les Libraries populaires que vous deviendrait un excellent développeur Java !

Nous arrivons au bout de ce cours consacré aux bases de Java. J'espère que celui-ci vous a plu et que vous avez appris beaucoup de choses. Vous avez maintenant toutes les clés en main pour :

  • Positionner Java en tant qu'écosystème de développement d'applications

  • Analyser le fonctionnement d'une boucle et d'une condition en Java

  • Discuter des bonnes pratiques de développement avec le TDD et Git

  • Analyser un code Java contenant des méthodes, des tableaux et des exceptions

  • Décrire les principes d'utilisation d'une librairie en Java

Vous connaissez maintenant tout un tas d'outils vous permettant d'appréhender beaucoup de problématiques en Java. Il vous reste à vous entraîner sur différents exercices pour bien les maîtriser et valider ces compétences. Je vous souhaite bon courage pour la suite de votre apprentissage et, surtout, de bien vous amuser avec Java :honte: !

Exemple de certificat de réussite
Exemple de certificat de réussite