MAVEN
Continuous Integration Presented by Wael ANIBA - UP JEE @ESPRIT -
[email protected]
2
Problématique?
3
Backround de maven
Maven est un outil open-source de build [et de gestion de projet] pour les projets Java.
Un projet d‟Apache Sponsorisé en grande partie par Sonatype
Historique Maven 1 (2003) • •
Maven 2 (2005) • • •
Very Ugly Utilisé dans le Stack 1
réécriture complète Pas rétrocompatible Utilisé dans les Stacks 2.0,2.1,2.2,3.0
Maven 3 (2010) • •
Le même que Maven2 mais plus stable Utilisé dans les Stacks 2.3, 3.1
4
Autres outils de build
Ant (2000) Grand père de Java Build Tools Scripting en XML Très flexible
Ant+Ivy (2004) Ant mais avec gestion de dépendance
Gradle (2008) Une combinaison de la structure de maven avec le Scripting de Groovy Facilement extensible Immature
5
Features de maven
Maven utilise une approche déclarative, où le contenu et la structure du projet sont décrits dans un fichier xml.
Maven utilise un paradigme connu sous le nom de Project Object Model (POM) Le coeur d'un projet Maven Contient une description détaillée de votre projet, avec en particulier des informations concernant: o o o o o o o
le versionning, la gestion des configurations, les dépendances, les ressources de l'application, les tests, les membres de l'équipe, la structure et bien plus encore.
Le POM prend la forme d'un fichier XML (pom.xml) qui est placé dans le répertoire de base de votre projet.
6
Maven identifie de manière unique un projet à l'aide:
groupID: Identifian arbitraire du projet Package de base (pas d‟espaces ou “:”) artfiactId: Nom arbitraire du projet version: Version du projet • •
Project Name (GAV)
Format {Major}.{Minor}.{Maintanence} Ajouter „-SNAPSHOT „si en cours de dev
GAV Syntax: groupId:artifactId:version
4.0.0 edu.esprit.training maven-training 1.0.0-SNAPSHOT
7
Packaging
Le type de build est identifié en utilisant l‟élement “packaging” Indique à Maven comment packager le projet Exemples de typse de packaging: • •
pom, jar, war, ear, custom jar par défaut
4.0.0 edu.esprit.training maven-training 1.0.0-SNAPSHOT jar
8
Héritage
Le fichier POM permet l‟héritage de Le
groupId et version La configuration du project Les dependences La configuration des Plugins Etc.
maven-training-parent org.lds.training 1.0 4.0.0 maven-training jar
9
Projet Multi Module
Maven propose un support multi-module Chaque projet maven crée une artefact primaire Une pom parent est utilisé pour regrouper des modules
... pom maven-training maven-training-web
10
Les Conventions de Maven
Maven applique le principe de “Convention Over Configuration” pour définir une structure conventionnelle d‟un projet “Mavenisé”.
Target: Le répertoire de travail par défaut src: Tous les fichiers source du projet vont dans ce répertoire src/main: Toutes les sources qui vont dans artefact primaire src/test: Toutes les sources contribuant à un projet de test src/main/java: Tous les fichiers sources java src/main/webapp: Tous les fichiers sources Web src/main/resources: Tous les fichiers sources non compilées src/test/java: Tous les fichiers source de test java src/test/resources: Tous les fichiers source de test non compilés
11
Goals Maven
o Un goal est une tâche précise que Maven est en mesure de réaliser à partir des informations qu'il pourra trouver dans le fichier pom.xml. o Pour lancer un goal Maven sur un projet, il faut se placer à la racine du projet et exécuter la commande : mvn
o Il est possible d'enchaîner deux ou plusieurs goals avec la commande : mvn
o Tous les goals se trouvent dans des plugins Maven. Pour exécuter un goal, Maven va donc commencer par résoudre le nom du goal pour en déduire le plugin dans lequel il se trouve et le télécharger. o Tous les goals maven s'écrivent de la façon suivante : : o Par exemple on peut lancer le goal compile du plugin compiler : mvn compiler:compile
12
Cycle de vie
Cycle de vie et goal Maven Le cycle de vie par défaut définit les étapes suivantes :
o validate o o o
o o o o
Valide que le projet est correctement défini compile Compile les sources test Lance les tests unitaires package Prépare la distribution du projet. (archives Jar, War, Ear...) integration-test Lance les tests d'intégration verify Lance des tests de validation du package créé. install Installe le package en local sur la machine pour pouvoir être réutilisé comme dépendance. deploy Déploie le package sur un serveur pour qu'il puisse être réutilisé par tout le monde.
Beaucoup d'autres phases sont disponibles en dehors du cycle de vie par défaut. Exemples: Clean, assembly, site, etc... Ils peuvent néanmoins être rajoutés au cycle de vie via le POM
13
Cycle de vie
mvn install o Invoque: generate* et compile, test, package, integration-test, install
mvn clean o Invoque juste clean
mvn clean compile o Supprime les anciens builds et execute generate*, compile
mvn compile install o Invoque generate*, compile, test, integration-test, package, install
mvn test clean o Invoque generate*, compile, test puis fait un clean
Dépendances transitives
14
Pas besoin de gérer les dépendances de votre projet. Déclaration des dépendences dans le pom.xml Maven se charge des bibliothèques dont vos bibliothèques ont besoin (et ainsi de suite) Dépendances transitives.
Ajouter une dépendance
Une dépendance doit définir: GAV Scope: compile, test, provided (default=compile) Type: jar, pom, war, ear, zip (default=jar) ... javax.servlet servlet-api 2.5 provided
Portée des dépendances
15
Pas besoin d'inclure toutes les dépendances dans l'application déployée. Certains des JARs sont nécessaires uniquement pour les tests unitaires, alors que d'autres seront fournis à l'exécution par le serveur d'application.
Maven mets à disposition quatre portés de dépendances :
compile: Disponible dans toutes les phases. C'est la valeur par défaut. provided: Utilisée pour compiler l'application, mais ne sera pas déployée. Vous utiliserez cette portée quand vous attendez du JDK ou du serveur d'application qu'il vous mette le JAR à disposition. L'API servlet est un bon exemple. runtime: Pas nécessaires pour la compilation, uniquement pour l'exécution, comme les drivers JDBC (Java Database Connectivity). test: Nécessaires pour compiler et exécuter les tests (par exemple Junit).
Deux portées seulement sont transitives: compile et runtime.
16
Maven Repositories
•
Les dépendances sont téléchargées depuis des repositories (Via http)
•
Les dépendances téléchargées sont stockées dans des caches Dans un repository locale – Généralement sous ${user.home}/.m2/repository
•
Maven Central est le premier repository communautaire – http://repo1.maven.org/maven2
17
•
Proxy Repositories
Les Proxy Repositories (exple: Nexus) sont utilisés pour: o o o
o o o o
Maintenir son propre repository Réduire le temps de répense Assurer la stabilité Créer un cache pour les artifacts Combiner des repositories Vérifier les licences (RM &CLM) Etc.
MAVEN Un exemple concret Continuous Integration
Communication de projet
19
La génération du site Maven peut être intégrée dans le processus de build. Un site Maven peut publier, sur une base quotidienne :
Des informations générales sur le projet, comme les entrepôts de source, le suivi des anomalies, les membres de l'équipe, etc. Les tests unitaires et les rapports de couverture des tests unitaires Des revues de code automatisées avec Checkstyle ou PMD Des informations sur la configuration ou le versionning Les dépendances La JavaDoc Le code source indexé et référençable, sous un format HTML La liste des membres de l'équipe Et beaucoup plus encore
20
Démarche
Installation de maven Création d‟un projet maven en utilisant le plugin archetype Application des phases du cycle de vie Configuration des outils d‟inspection: Ajout des plugins de reporting dans le fichiers pom.xml: ... ...
Utiliser mvn site pour générer le site Le site est alors généré dans le respertoire target/site.
21
Une liste de plugin est disponible sur le Maven central repository fournie par le projet codehaus Mojo: http://mojo.codehaus.org /plugins.html
Reporting Plgins
22
Reporting Plgins
23
Conclusion
Une
des motivations historiques de cet outil est de fournir un moyen de synchroniser des projets indépendants Cela
aide à mettre en place des standards de développements au niveau d'une société et réduit le temps nécessaire pour écrire et maintenir les scripts de build.
MAVEN
Continuous Integration Presented by Wael ANIBA - UP JEE @ESPRIT - [email protected]