Mif01 - TP Maven-Git-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 Git (git)
- Outil de gestion de projet avec Gitlab (la Forge)
Déroulement
Ce TP est à réaliser de préférence sous Linux (accès à mvn et git en ligne de commande). L’utilisation d’IDE est n’est pas recommandée pour ce TP.
Démarrage
Créer un nouveau projet sur la forge : forge.univ-lyon1.fr → + → 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).
Sur votre ordinateur, dans un terminal, ajoutez les informations de base à votre compte git :
git config --global user.name "Nom Prenom"
git config --global user.email "votre_email@etu.univ-lyon1.fr"
Toujours dans un terminal, déplacez vous dans le dossier ou vous souhaitez créer le projet, et clonez votre dépôt git. L’URL de votre dépôt est accessible dans Gitlab depuis la page du projet :
git clone git@forge.univ-lyon1.fr:NomdUtilisateur/NomDeVotreRepo.git
En cas de problème, voir la faq de la forge, et le guide de Titouan Chary (M2) pour accéder à la forge depuis l’extérieur.
Se placer dans le répertoire du et récupérer des modifications depuis le projet balleauprisonnier_2017:
git pull http://forge.univ-lyon1.fr/aurelien.tabard/balleauprisonnier_2017.git
Ce projet est constitué d’un projet maven (nommé balleauprisonnier_mvn dans le fichier pom.xml).
Reverser dans votre projet forge:
git push -u origin master
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.
.gitignore et gestion d’un ticket
Depuis le projet forge, créer une nouvelle demande (issue) 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. Poursuivre le TP puis revenir à la demande et la marquer comme fermée (closed) une fois le travail terminé. Noter le numéro #xxxx de la demande.
Créer un fichier .gitignore à la base du répertoire de travail balleauprisonnier et y ajouter les lignes suivantes :
# Ignore les fichiers de configuration d'Eclipse
.classpath
.project
.settings/
# Ignore les fichiers de configuration d'Intellij
.idea/
*.iml
*.iws
# Ignore le dossier Mac .DS_Store
.DS_Store
# Ignore les fichiers produits par Maven pour ne versionner que le code,
# pas les executables ou les logs.
log/
target/
ce fichier contient la liste des fichiers à ignorer par git.
git status
n’affiche à présent plus les fichiers dans target, mais affiche le fichier .gitignore. Ajouter ce fichier dans les fichiers versionnés:
git add .gitignore
puis valider en indiquant le numéro de la demande #xxxx dans le message de commit:
git commit -m "Gestion des fichier à ignorer (bug #xxxx)"
puis faire le push
git push
Dans le projet forge, aller voir le dépôt et cliquer 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.
Invocation de maven
Regarder le code de la classe balleauprisonnier_mvn.App du module balleauprisonnier_mvn (fr/univ_lyon1/info/m1/balleauprisonnier_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 veut souvent nettoyer le dossier target, et relancer le processus de build, tests compris :
mvn clean install
Pour lancer l’application en ligne de commande on utilise :
java -cp target/balleauprisonnier_mvn-0.0.1.jar fr.univ_lyon1.info.m1.balleauprisonnier_mvn.App
S’il n’y a pas d’erreur, enregistrer les modifications, puis poussez les vers votre dépôt:
git commit -m "un message explicatif ici"
git push -u origin master
Constater que les modifications sont visibles depuis site de votre projet forge.
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/balleauprisonnier_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 Git traite du sujet), et Github a un guide expliquant plutôt bien les choses.
Pour lancer la fusion des deux branches avec on utilise la commande merge:
git 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.
git status signale les fichiers en conflits. 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
git resolve -m le_fichier_concerne