La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Maven2 Nicolas De loof - Raphaël.

Présentations similaires


Présentation au sujet: "Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Maven2 Nicolas De loof - Raphaël."— Transcription de la présentation:

1 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Maven2 Nicolas De loof - Raphaël Piéroni

2 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Qui sommes nous ? Nicolas De loof Committer Maven depuis fin 2007 plugins JavaScript et GWT Raphaël Piéroni Committer depuis l'été 2007 réécriture complète du mécanisme d'archetype

3 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Prologue

4 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Prologue  Ant = java make Répétition (copier/coller) d’un projet à l’autre…

5 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Prologue Génération des binaires Distribution Qualimétrie Documentation Configuration IDE Génération de code Gestion de version

6 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Prologue  Maven 1 = scripts Ant mutualisés (« plugins ») outillés par des tags Jelly Dérive progressive comme langage de Script Invocations inter-plugins … cycles Mutualisation ?

7 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Prologue  Prendre les bonnes idées de Maven 1  … sans les faiblesses

8 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique

9 Maven2 … c’est quoi ?  Quelques règles de structure  Un moteur d’exécution de plugins … et rien d’autre ! Et surtout pas un N-ième langage de script !

10 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Conventions…  Maven établit des conventions « raisonnables » sur la structure du projet : Sources dans src Livrables dans src/main Tests dans src/test Tout ce qui est construit dans target Code généré dans target/generated-sources …

11 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique … over configuration  Conventions = moins de configuration pour chaque plugin  Plus d’homogénéité entre projets  Un projet « basique » peut être compilé, testé, packagé par maven sans configuration dédiée.

12 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique exemple 4.0.0 com.mycompany foo 1.0.0 log4j 1.2.12

13 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Plugin  Ecrit en Java  Projet « maven » à part entière  Peut exploiter toute librairie java jugée utile  Configuré par Injection de dépendances  Exécution 100% étanche : indépendant du projet et des autres plugins

14 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique LifeCycle Validate generate-sources generate-resources process-resources compile process-classes test-compile test package integration-test verify install deploy phasesplugins resource:resource compiler:compile surefire:test jar:jar install:install deploy:deploy

15 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique LifeCycle Validate generate-sources generate-resources process-resources compile process-classes test-compile test package integration-test verify install deploy phasesplugins resource:resource compiler:compile surefire:test jar:jar install:install deploy:deploy cxf:wsdl2java

16 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Communication inter-plugins Validate generate-sources generate-resources process-resources compile process-classes test-compile test package integration-test verify install deploy phasesplugins resource:resource compiler:compile surefire:test jar:jar install:install deploy:deploy cxf:wsdl2java team@breizhjug.org

17 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Communication inter-plugins Validate generate-sources generate-resources process-resources compile process-classes test-compile test package integration-test verify install deploy phasesMavenProject addSourceRoot getSourceRoots plugins resource:resource compiler:compile surefire:test jar:jar install:install deploy:deploy cxf:wsdl2java team@breizhjug.org

18 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Plugins : toujours plus  Il est aisé d’ajouter un plugin Outillage de test Contrôle qualité Génération de code Packaging spécifique …  SANS impact sur l’existant

19 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Plugins : où les trouver ?  Plugins « officiels » : http://maven.apache.org/plugins/ http://maven.apache.org/plugins/  Plugins « communautaires » : http://mojo.codehaus.org/ http://mojo.codehaus.org/  Plugins spécifiques cxf, jaxws, cargo, …

20 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Besoin spécifique ?  L’écriture d’un plugin est facile (plus que celle d’une tâche ANT) ‏ En Java, Groovy, BeanShell …  Projet Java/Maven à part entière toutes les librairies sont accessibles le plugin peut être outillé de tests Mécanisme de documentation intégré La diffusion/mutualisation du plugin est facilitée

21 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique démo  Un besoin « spécifique » Codage en Groovy Application Swing Framework spécifique …

22 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Dépendances  Maven gère les dépendances nécessaire au projet

23 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Transitivité  Mon projet dépend d’ Hibernate  Hibernate dépend d’ EHcache  Donc Mon projet dépend d’ EHcache

24 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Transitivité  Vous sauriez gérer ça à la main ?

25 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Effet de bord  Maven encourage les librairies ciblées plutôt que le gros JAR qui fait tout  Plus de librairies  Gestion fine des dépendances

26 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Repository = Dépôt de librairies  Dépôt local ($HOME/.m2/repository)‏ Évite la multiplication des.jar sur le poste de dev.  Dépôt(s) public(s) (http://repo1.maven.org/maven2)‏ Mise à disposition rapide des librairies libres  Dépôt privé Gestion fine des librairies, libres ou non

27 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique SNAPSHOTS  Version « en cours de développement »  Permet de diffuser une version non finalisée  par défaut, exclu des repositories  Très utilisé pour les plugins

28 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique SNAPSHOTS org.codehaus.mojo gwt-maven-plugin 1.0-SNAPSHOT eclipse compile generateAsync … 2.5.2-20080520.120258-2

29 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Deploiement sourceforge sync to central scp://shell.sourceforge.net/… sourceforge snapshot repository false scp://shell.sourceforge.net/…

30 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Repository d’entreprise

31 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Extrapolation  Les valeurs des attributs XML peuvent être déduites d’une propriété : 2.5.5

32 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Extrapolation  Centralisation de la configuration org.springframework spring-aop ${spring.version} maven-compiler-plugin ${maven.compile.source} ${maven.compile.target} ${project.build.sourceEncoding}

33 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Profils  Spécialiser le build Profil « fast » Profil « dev » Profil « ci » Profil « release »  Activation À la demande -Pxxx Sur critère (OS, fichier, propriété « -D », …) ‏

34 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique

35 POM.xml  Formalisme XML incroyablement verbeux.. et désormais intouchable pour rester compatible

36 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique POM.xml org.codehaus.plexus plexus-archiver 1.0-alpha-9 org.codehaus.plexus plexus-container-default org.codehaus.plexus plexus-component-api <dependency groupId="org.codehaus.plexus" artifactId="plexus-archiver" version="1.0-alpha-9"> org.codehaus.plexus:plexus-container-default org.codehaus.plexus:plexus-component-api

37 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique POM.xml org.codehaus.mojo xml-maven-plugin 1.0-beta-2 transform generate-sources src/main/wsdl adg.wsdl... adg.wsdl...

38 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Support des IDE ?  Netbeans :  IntelliJ IDEA :  Eclipse :… en progrès Sondage : quel IDE utilisez vous ?

39 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Release early, release often  Peu de développeurs +  Politique frileuse Apache +  Mécanisme de SNAPSHOTS =  Les releases de plugin sont rares

40 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Plugins absents  De nombreux outils n’ont toujours pas de plugin maven2  La faute du plugin AntRun ?  La faute de l’API Maven ?

41 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Dépendances transitives  De nombreux projets déclarent des dépendances superflues / incorrectes  Règle : un POM.xml publié n’est jamais modifié  Les choses s’améliorent…  Utiliser un dépôt privé !

42 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique JAR javax.* absents  Pour raison de licence !  Mais qui s’en soucie à part la fondation Apache ?  Pourquoi pas un « accept licence ? [Y/N] » ?  Dépôt sur java.net pour les APIs récentes

43 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Version Java cible  XYZ.jar est-il compatible java 1.4 ?  Le plugin YY nécessite Java5  Maven nécessite Java 1.4  Mon projet cible Java 1.3

44 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Doublons  commons-beanutils + commons-beanutils-core  commons-logging + commons-logging-api  commons-io + org.apache.commons:-io  …

45 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Exclusion globale  Je ne VEUX PAS utiliser commons-logging !

46 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Tests d’intégration  src/it/java ?

47 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Interrogations  Fàce à OSGi et Java Modules … quelle place pour maven ?  Plus généralement, quelle est la roadmap ?

48 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique

49 Conflits d’intérêts

50 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Conséquences  Repository d’entreprise : Archiva vs Nexus  Intégration sous Eclipse : q4e (iam) vs m2eclispe  …

51 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Despot-driven ?  Théoriquement, le développement est « piloté par la communauté »  Et dans les faits ? Re: [M2] Are pom.xml settings.xml really well-formed? by Jason van Zyl – 2 Feb 09, 2008; 06:09pm We don't use Xerces, never have, never will.

52 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Techno-obscur  Injection de dépendances : Plexus  Séparation des classloaders : ClassWorlds  Mapping Java / XML : Modello  Trois projets clés, hors fondation apache Sondage : qui connaît au moins un de ces outils ?

53 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique

54 épilogue

55 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique « Killer » plugin : Release  Génération du livrable du projet ?  Option 1 : MaProcédureDe50PagesJamaisAJour.doc  Option 2 : mvn release:prepare mvn release:perform

56 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Release démo

57 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique « Killer » plugin : Archetype  Démarrer un projet « propre » en 2 minutes ?  En se basant sur un projet de référence ! mvn archetype:create-from-project mvn archetype:generate

58 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Archetype démo

59 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique

60 Vos questions  Quelles bonnes pratiques pour Maven ?  Comment "Maveniser" un projet Web Tools Platform (WTP) ?

61 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Bonnes pratiques  Adapter le projet à Maven, pas l’inverse  Utiliser des modules ciblés et simple  Penser « plugin »  Participer à la communauté des utilisateurs  Rapporter ses problèmes en utilisant un cas de test simple

62 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Bonnes pratiques  Verrouiller les versions des plugins  Indiquer les dépendances directes  Lire la doc ;-) [2 « open-books »]  Utiliser un gestionnaire de dépôt (archiva/nexus) ‏  Rester indépendant de l’environnement … éviter les settings.xml exotiques  Attention au " -Dmaven.test.skip=true "

63 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Bonnes pratiques « Les meilleures pratiques sont celles qui correspondent à vos besoins »

64 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Maven et WTP  Supporté par M2eclipse et Q4e

65 Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Question / réponses


Télécharger ppt "Copyright © BreizhJug – License Creative Commons 2.0 France – Paternité - Partage des Conditions Initiales à l'Identique Maven2 Nicolas De loof - Raphaël."

Présentations similaires


Annonces Google