Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide
Consultez :
  • Les documents de reference sur le projet original
  • Les sources de la traduction fr sur GitHub
  • maven


    3.5. Les concepts principaux

    Maintenant que nous avons exécuté Maven pour la première fois, il est temps de s'intéresser aux concepts qui sont au cœur de Maven. Dans l'exemple précédent, vous avez généré un projet qui consistait en un POM et un peu de code respectant la disposition Maven standard des répertoires. Puis vous avez exécuté Maven en lui passant une phase de son cycle de vie, ce qui a demandé à Maven d'exécuter toute une série de goals de plugins Maven. Enfin, vous avez installé l'artefact produit par Maven dans votre dépôt local. Une minute ? Qu'est ce que le "cycle de vie" ? Qu'est donc un "dépôt local" ? La section qui suit définit certains des concepts au cœur de Maven.

    3.5.1. Plugins Maven et Goals

    Dans la section précédente, nous avons exécuté Maven en ligne de commande avec deux types d'arguments différents. La première commande appelait uniquement un goal d'un plugin, le goal generate du plugin Archetype. La deuxième exécution de Maven était une phase du cycle de vie, install. Pour exécuter un unique goal d'un plugin Maven, nous avons utilisé la syntaxe mvn archetype:generate, où archetype est l'identifiant du plugin et generate l'identifiant du goal. Lorsque Maven exécute le goal d'un plugin, il affiche l'identifiant du plugin et l'identifiant du goal sur la sortie standard :

    $ mvn archetype:generate -DgroupId=org.sonatype.mavenbook.simple \
                                            -DartifactId=simple \
                                            -DpackageName=org.sonatype.mavenbook
    ...
    [INFO] [archetype:generate]
    [INFO] artifact org.apache.maven.archetypes:maven-archetype-quickstart: \
           checking for updates from central
    ...

    Un plugin Maven se compose d'un ou plusieurs goals. On peut prendre comme exemples de plugins Maven ceux qui constituent le cœur de Maven comme le plugin Jar dont les goals permettent de créer des fichiers JAR, le plugin Compiler avec ses goals pour compiler le code source et le code des tests unitaires, ou le plugin Surefire dont les goals permettent l'exécution des tests unitaires et la production des rapports. On trouve aussi d'autres plugins, plus spécialisés, comme le plugin Hibernate3 pour l'intégration de la bibliothèque très connue de persistence Hibernate, le plugin JRuby qui permet l'exécution de code Ruby durant un build Maven ou l'écriture de plugins Maven en Ruby. Maven permet aussi de définir ses propres plugins. Vous pouvez écrire votre propre plugin en Java ou dans de nombreux autres langages dont Ant, Groovy, Beanshell et, comme indiqué plus haut, Ruby.

    Un plugin possède des Goals

    Figure 3.1. Un plugin possède des Goals


    Un goal est une tâche spécifique qui peut être exécutée individuellement ou combinée à d'autres goals pour un build plus large. Un goal est une "tâche unitaire" dans Maven. On peut prendre comme exemple le goal compile du plugin Compiler, qui, comme son nom l'indique, compile tout le code source du projet, ou le goal test du plugin Surefire, qui exécute les tests unitaires. La configuration des goals s'effectue au travers de propriétés qui sont utilisées pour personnaliser le comportement. Par exemple, le goal compile du plugin Compiler définit un ensemble de paramètres de configuration qui vous permettent de préciser la version du JDK cible ou les options d'optimisation du compilateur. Dans l'exemple précédent, nous avons passé les paramètres de configuration groupId et artifactId au goal generate du plugin Archetype via les paramètres de la ligne de commande -DgroupId=org.sonatype.mavenbook.simple et -DartifactId=simple. Nous avons aussi passé le paramètre packageName au goal generate avec la valeur org.sonatype.mavenbook. Si nous n'avions pas précisé le paramètre packageName, le nom du package aurait été par défaut org.sonatype.mavenbook.simple.

    Note

    Lorsque l'on fait référence au goal d'un plugin, il est courant d'utiliser le raccourci : pluginId:goalId. Par exemple, pour utiliser le goal generate du plugin Archetype, nous pouvons écrire archetype:generate.

    Les goals ont des paramètres qui peuvent avoir des valeurs par défaut raisonnables. Dans l'exemple de archetype:generate, nous n'avons pas précisé, via la ligne de commande, quel type d'archétype devait être utilisé pour créer le projet ; nous avons simplement indiqué un groupId et un artifactId. Comme nous n'avons pas fourni le type d'archétype à créer, le goal generate nous a demandé d'intervenir, le goal generate s'est donc interrompu et nous a demandé de choisir dans une liste. Par contre, si nous avions utilisé le goal archetype:create, Maven aurait supposé que nous voulions créer un nouveau projet avec l'archétype maven-archetype-quickstart. C'est notre premier contact avec le concept de convention plutôt que configuration. La convention, ou le comportement par défaut, pour le goal create est de créer un projet basique à partir de l'archétype Quickstart. Le goal create définit une propriété de configuration archetypeArtifactId dont la valeur par défaut est maven-archetype- quickstart. L'archétype Quickstart génère le squelette d'un projet minimal qui contient un POM et une unique classe. Le plugin Archetype est bien plus puissant que cet exemple ne le laisse supposer, mais c'est une façon efficace de commencer rapidement de nouveaux projets. Plus tard dans ce livre, nous vous montrerons comment il est possible d'utiliser le plugin Archetype pour produire des projets plus complexes, comme des applications web, et comment utiliser le plugin Archetype pour définir vos propres structures de projets.

    Le cœur de Maven n'intervient que très peu dans les tâches spécifiques qui composent le build de votre projet. Maven, tout seul, ignore comment compiler votre code ou produire un fichier JAR. Il délègue tout cela à des plugins Maven comme le plugin Compiler et le plugin Jar, qui sont téléchargés selon les besoins et mis à jour régulièrement depuis le dépôt central de Maven. Lorsque vous téléchargez Maven, vous n'obtenez que le cœur de la plateforme qui ne sait que parser une ligne de commande, gérer un classpath, parser un fichier POM et télécharger des plugins Maven selon les besoins. Les utilisateurs ont facilement accès aux dernières options du compilateur grâce à Maven qui maintient le plugin Compiler en dehors de son cœur et fournit un mécanisme de mise à jour. Ainsi, les plugins Maven apportent une logique de build réutilisable universellement. Vous ne définissez pas la tâche de compilation dans un fichier de build ; vous utilisez le plugin Compiler plugin qui est partagé par tous les utilisateurs de Maven. Si le plugin Compiler est amélioré, tout projet qui utilise Maven en bénéficie immédiatement. (Et, si vous n'aimez pas le plugin Compiler, vous pouvez le remplacer par votre propre implémentation.)