Mif02 - TP Maven-Mercurial-Forge
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