Semaine 13: Maven - semiria/INF2015 GitHub Wiki

##Objectifs

  • Manipuler Maven
  • Gérer les dépendances d'un projet avec Maven
  • Convertir un projet existant pour utiliser Maven

##Prérequis

  • Maven 3
  • NetBeans 8.0
  • Git

##Exercices

###Convertir JSON en projet Maven Les noms et emplacements des répertoires font partis des standards de Maven. Dans le cadre de ce laboratoire, nous changerons l'emplacement des répertoires des fichiers sources pour correspondre aux standards et nous conserverons cette conversion sous contrôle de version.

Afin d'éviter les conflits de détection avec NetBeans, il est important de fermer le projet, puis de fermer l'application avant de commencer la conversion.

  1. Cloner la dernière version du projet JSON

  2. Pointer vers la branche "correction"

  3. Créer un nouveau fichier pom.xml à la racine du projet

    ├── README.md
    ├── pom.xml
    ├── build
    │   └── classes
    │       └── json
    │           ├── FileReader.class
    │           └── JSON.class
    ├── build.xml
    ├── json
    │   ├── jours.json
    │   ├── oeuvres.json
    │   └── personnages.json
    ├── lib
    │   ├── commons-beanutils-1.8.0.jar
    │   ├── commons-collections-3.2.1.jar
    │   ├── commons-io-2.4.jar
    │   ├── commons-lang-2.5.jar
    │   ├── commons-logging-1.1.1.jar
    │   ├── ezmorph-1.0.6.jar
    │   └── json-lib-2.4-jdk15.jar
    ├── manifest.mf
    ├── nbproject
    │   ├── build-impl.xml
    │   ├── genfiles.properties
    │   ├── private
    │   │   ├── config.properties
    │   │   ├── private.properties
    │   │   └── private.xml
    │   ├── project.properties
    │   └── project.xml
    └── src
        └── json
            ├── FileReader.java
            └── JSON.java
    
  4. Éditer le fichier pom.xml pour y inclure ce code en modifiant le groupId, artifactId, et name pour refléter le projet JSON.

    <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>com.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>Maven Quick Start Archetype</name>
      <url>http://maven.apache.org</url>
    </project>
    
  5. Restructurer le projet pour respecter les standards Maven

    1. Dans le répertoire src du projet, créer des nouveaux répertoires main/java et /test/java
    └── src
        ├── json
        │   ├── FileReader.java
        │   └── JSON.java
        ├── main
        │   └── java
        └── test
            └── java
    
    1. Déplacer les packages de code dans le nouveau répertoire src/main/java. Si vous utilisez git à la ligne de commande, vous remarquerez que git log src/main/java/json/JSON.java retournera les commits seulement depuis le déplacement du fichier. Pour obtenir les logs précédants, utilisez l'option --follow, c'est-à-dire git log src/main/java/json/JSON.java
    └── src
        ├── main
        │   └── java
        │       └── json
        │           ├── FileReader.java
        │           └── JSON.java
        └── test
            └── java
    
  6. Supprimer les fichiers et répertoires propres à Ant

    1. nbproject/
    2. build.xml
    3. dist *
    4. build *
      • Les répertoires dist et build sont à retirer si vous avez compilé et exécuter le projet au préalable. Le projet JSON de base, tel que versionné actuellement, ne possède pas ces répertoires.
  7. Ouvrir le projet dans NetBeans (Open project). Vous remarquerez que l'icône du projet sera changée.

Procéder de cette façon permettra de conserver l'historique de la conversion ainsi que tous les autres commits précédents. C'est la façon recommandée de faire, mais il est probable qu'elle ne s'applique pas à tous les projets. Il est possible de configurer le pom.xml afin de conserver l'emplacement des répertoires actuels, mais il est déconseillé de faire ainsi puisque c'est contre les standards.

###Ajouter les librairies json-lib, commons.io.IOUtils et junit 4 Vous remarquerez que le projet ne compile pas puisque les librairies nécessaires n'ont pas été inclut dans le projet. Il existe plusieurs méthodes pour installer des dépendances.

####Modifier le fichier pom.xml pour inclure la librairie json-lib 2.4

  1. Rechercher le plugin json-lib sur mvnrepository et choisir la version 2.4
  2. Copier la node dependancy de Maven
  3. Ouvrir le fichier pom.xml et ajouter une node <dependencies></dependencies>
  4. Coller la node que vous avez copier plus tôt à l'intérieur de la node dependencies
  5. Ajouter la node <classifier>jdk15</classifier> à votre dépendance (valide pour json-lib seulement)

Notez que si vous passez par NetBeans pour ajouter la librairie json-lib, NetBeans ajoutera automatiquement la node classifier. Par contre, la version sera jdk13, qui n'est pas adéquate pour l'exercice.

####Utiliser l'aide de NetBans pour ajouter la librairie commons.io.IOUtils Il manque la librairie commons.io.IOUtils nécessaire à la classe FileReader.

  1. Rendez-vous à la classe FileReader
  2. Cliquez sur l'icône d'aide NetBeans (la petite ampoule à gauche de la fenêtre de code)
  3. Cliquez sur Search Depency at Maven Repository for org.apache.commons.io.IOUtils
  4. Sélectionnez la librairie commons-io: commons-io et cliquez sur Add
  5. Remarquez que NetBeans a automatiquement modifié fichier pom.xml en incluant la nouvelle librairie.
  6. Compilez et exécutez le projet.

####Faire une recherche dans le Maven Repository à partir de NetBeans

  1. Dans la vue Projects, faites un clique-droit sur le répertoire Dependancies
  2. Cliquez sur Add Dependancy
  3. Dans le champs Query, faites une recherche pour JUnit4
  4. Choisissez la librairie junit: junit, la version 4.11, et cliquez sur Add

##Solutionnaire Branche Maven du projet JSON

##Références

⚠️ **GitHub.com Fallback** ⚠️