Revenir a la page du cours

Objectif

Mettre en place et maitriser les outils de gestion de code utilisés tout au long de l’année.

  • Outil de build avec Maven (mvn)
  • Outil de versioning avec Mercurial (hg)
  • Outil de gestion de projet avec Redmine (la Forge)

Ceci est une version révisée pour le Mif02 du TP générique d’Emmanuel Coquery.

Déroulement

Ce TP est à réaliser de préférence sous Linux (accès à mvn et hg en ligne de commande). L’utilisation d’IDEs est n’est pas recommandée pour ce TP.

Démarrage

Créer un nouveau projet sur la forge (http://forge.univ-lyon1.fr → Projets → Nouveau Projet). Si vous vous connectez pour la première fois, le système vous permettra de vérifier/modifier les informations qui vous concernent, idem pour votre éventuel binôme. Ajouter ce dernier comme développeur de votre projet (Configuration → Membres)

Clonez votre dépôt mercurial dans un répertoire poneymon1. L’URL de votre dépôt est accessible dans Redmine depuis votre projet via Configuration → Dépôt:

hg clone https://forge.univ-lyon1.fr/hg/NomDeVotreRepo      poneymon1

En cas de warning de sécurité voir la faq de la forge

Se placer dans le répertoire poneymon1 et récupérer des modifications depuis le projet poneymon_v0:

hg pull https://forge.univ-lyon1.fr/hg/poneymon_v0

puis mettre à jour à la dernière version

hg update

Ce projet est constitué d’un projet maven (nommé poneymon_mvn dans le fichier pom.xml).

Reverser cette mise à jour dans votre projet forge:

hg push

Dans le navigateur, naviguer dans le dépôt: vous pouvez voir les révisions déjà présentes et même regarder le code source en ligne, ainsi que les différences entre les révisions.

.hgignore et gestion d’un ticket

Depuis le projet forge, créer une nouvelle demande intitulée: “ignorer le répertoire target”. Ce dossier target sera créé par maven au moment du build, et contiendra les fichier .class et le jar.

Accéder à la liste des demandes de votre projet, puis à la demande précédente. Modifier cette demande en assignant un des membres du projet à cette tâche, passez son status à “In progress” et valider. Noter le numéro #xxxx de la demande.

Créer un fichier .hgignore à la base du répertoire de travail poneymon1 et y ajouter les lignes suivantes :

    syntax: glob
    target

ce fichier contient la liste des fichiers à ignorer par mercurial.

hg status

n’affiche à présent plus les fichiers dans target, mais affiche le fichier .hgignore. Ajouter ce fichier dans les fichiers versionnés:

hg add .hgignore

puis valider en indiquant le numéro de la demande #xxxx dans le message de commit:

hg commit -m "Gestion des fichier à ignorer (bug #xxxx)"

puis faire le push

 hg push

Dans le projet forge, allez voir le dépôt et cliquez sur le dernier commit et ajouter une demande liée en spécifiant votre numéro de ticket. Cliquer ensuite sur le lien vers la demande depuis le message de commit.

Passer le statut de la demande à “closed” en indiquant le numéro de la révision précédé de la lettre r5) ou le hash du commit précédé de commit: dans les notes de mise à jour6).

Invocation de maven

Regarder le code de la classe poneymon_mvn.App du module poneymon_mvn (fr/univ_lyon1/info/m1/poneymon_mvn/App.java).

Invoquer

mvn compile

à la racine du projet et constater que la construction du projet est bien déclenchée.

Le répertoire target contient tout ce qui est généré par maven. Explorer le contenu du répertoire, puis invoquer

mvn clean

Regarder ce qui a été supprimé.

On lancer les tests associés au projet avec:

mvn test

La phase de vérification doit fonctionner car aucun test unitaire n’est réellement implémenté pour le moment, nous verrons cela dans un TP suivant.

En pratique on appelle souvent, ce qui permet de nettoyer le dossier target, et de relancer le processus de build, tests compris :

mvn clean install

Pour lancer l’application en ligne de commande on utilise :

java -cp target/poneymon_mvn-0.0.1.jar fr.univ_lyon1.info.m1.poneymon_mvn.App

S’il n’y a pas d’erreur, enregistrer les modifications, puis poussez les vers votre dépôt:

hg commit -m "un message explicatif ici"
hg push

Constater que les modifications sont visibles depuis site de votre projet forge.

Si mercurial se plain que vous n’avez pas spécifié de nom d’utlisateur, deux choix:

Utiliser l’argument -u “mon nom mon.email@mon.domaine
Modifier votre configuration mercurial en ajoutant au fichier ~/.hgrc (doc)

   [ui]
   username = John Doe <john@example.com>

Packaging

Configurer le plugin maven-assembly-plugin pour générer un jar exécutable incluant les bibliothèques utilisées (voir ici).

Tester en lancer java via

java -jar target/poneymon_mvn-0.0.1-jar-with-dependencies.jar

Gérer les conflits

Nous n’allons pas mettre en pratique la gestion de conflits dans ce TP, mais c’est quelque chose qui arrive fréquement. La documentation de Mercurial traite du sujet).

Pour lancer la fusion des deux branches avec on utilise la commande merge:

hg merge

Le conflits interviennent souvent lors du pull d’une branche dans la branche courante. Cette commande importe les modification de la branche crée lors du pull dans la branche courante.

hg status signale les fichiers en conflits avec la lettre M. Editer ces fichiers pour intégrer de manière cohérente les modifications effectuées dans le deux branches. Une fois les modifications effectuées, si la construction mvn install fonctionne, indiquer ques les conflits sont résolus via

hg resolve -m le_fichier_concerne