Maven

18
Outil de construction Convention vs Configuration

description

Maven : convention over configuration

Transcript of Maven

Outil de construction Convention vs Configuration

Introduction

• maven ... c’est quoi ?

• Pourquoi maven ?

• maven... pour quoi faire ?

• maven... comment faire ?

C’est quoi maven ?

C’est quoi maven ?• Outil de build

• Né de l’expérience des outils comme Makefile, Ant, etc.

• En reprend les fonctionnalités principales (gestion des dépendances, script de construction)

• Ajout de fonctions : test automatique, génération de rapport

• Plugable

Pourquoi maven ?

Pourquoi maven ?• Éviter les constructions manuelles 

• Standardiser le modèle de projet

• Standardiser la chaîne de construction 

• Automatiser le maximum

• Gérer les dépendances

• Faire plus que de la construction :

• Exécution des tests unitaires

• Génération de documentation

• Génération de rapports de tests, de couverture code, d'analyses statique (checkstyle, PMD, CPD, ...)

Pourquoi maven ?

• Gestion des dépendances entre projets (dependency graph de m2eclipse)

Comment faire ?

Comment faire ?• Convention != normes, obligations,

contraintes...

• Si tu veux configurer tu es libre mais débrouille toi...

• KISS : Keep It Simple, Stupid 

• Partir de rien, quand c'est possible

• Industrialiser au maximum

• Bien définir les dépendances, être minimaliste

Comment faire ?• pom.xml

• POM : Project Object Model

• Situé à la racine du projet

• Phase principales dans le cycle de vie de Maven 

• compile

• test

• package

• install

• deploy

Comment faire ?• pom.xml

• POM : Project Object Model

• Situé à la racine du projet

• Phase principales dans le cycle de vie de Maven 

• compile

• test

• package

• install

• deploy

Comment faire ?• Convention des répertoires

• /src : les sources du projet

• /src/main : code source et fichiers source principaux

• /src/main/java : code source

• /src/main/resources : fichiers de ressource

• /src/test : fichiers de test

• /src/test/java : code source de test

• /src/test/resources : fichiers de ressources de test

• /src/site : informations sur le projet pour les rapports

• /src/main/webapp : webapp du projet

• /target : fichiers résultat, les binaires (du code et des tests), les packages générés et les résultats des tests

Comment faire ?

• Configuration local

• $home

• .m2

• settings.xml

• repository

• libs

Comment faire ?• Les commandes maven de base

• mvn install : compile le projet, exécute les tests, met a disposition le repository local

• mvn clean install : supprime le fichier target et re-install

• mvn test : exécute les tests unitaire du projet

• mvn eclipse:eclipse :génère les .classpath et .project

• mvn site : génère le site du projet, information général, rapport de test, de qualité, ...(conf. pom.xml requise)

Comment faire ?• Comment faire planter son projet maven ?

• En n’utilisant pas les conventions de Maven 2 (target, héritage, répertoires src…)

• En ayant trop de sous modules avec des versions différentes (naissance de nouveaux projets involontairement)

• En ayant trop de modules dans le même projet : pénalise la performance

• En confondant dependencies et dependencyManagement

• En confondant plugins et pluginManagement

• En utilisant massivement antrun : empêche la réutilisation

• En utilisant à outrance les profils : rend dépendant de l’environnement

• En utilisant trop le reporting de qualité sur des projets déjà existant

• En mettant tout et n’importe quoi dans le POM

• En faisant des releases à la main

Comment faire ?• Comment réussir son projet maven ?

• Utiliser l’héritage « naturel »

• Bien définir les dépendances, être minimaliste !

• Fixer les dépendances dans le dependencyManagement

• On peut utiliser aussi le plugin reactor pour ne compiler que ce qui as été modifié

L’intégration continue• But : prévenir les bogues, améliore le cycle de

développement en réduisant les corrections en phase de robustesse

• Intégration, test, contrôle de qualité

• Lancement de la construction à chaque commit possible ou paramétré avec un délai

• Les logiciels :

• Hudson : coder à la base pour le projet Glassfish, très en vogue et très intuitif, facile à mettre en œuvre. Pour le tester en local : java –jar hudson.war (déployer sur http://localhost:8080/)

• Bamboo : payant

• Teamcity de Jetbrain, « build incassable »

• Continuum : Apache, vieux produit pas très conviviale mais bien intégrer avec maven

• CruiseControl : vieux produit !

Joel test...Utilisez-vous un gestionnaire de source ?!

Vos binaires sont-il assemblé en une fois ?!Vos binaires sont-il produits quotidiennement ?!

Avez-vous un gestionnaire d’anomalie ?!Le code est-il corrigé avant d’être étendu ?!

Avez-vous un planning à jour ?!Avez-vous des spécifications ?!

Vos développeurs sont-il dans un lieu calme ?!Avez-vous les meilleurs outils pour votre budget ?!

Avez-vous des testeur ?!Les recrues écrivent-elles du codes ?!

Faites-vous des tests utilisateurs complet?