Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parNihel Jourdain Modifié depuis plus de 9 années
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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.