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


    14.2. Les bases du plugin Assembly

    Avant d'aller plus loin, prenons une minute pour parler des deux principaux goals du plugin Assembly : assembly:assembly et le mojo single. J'ai cité ces deux goals de manière différente pour indiquer qu'on ne les utilise pas de la même manière. Le goal assembly:assembly est conçu pour être invoqué directement depuis la ligne de commande et il ne doit jamais être lié à une phase du cycle de vie. Au contraire, le mojo single est lui conçu pour faire partie de votre build de tous les jours et doit être rattaché à une phase du cycle de vie du build de votre projet.

    La raison de cette différence est que le goal assembly:assembly est ce que Maven appelle un mojo agrégateur ; c'est à dire un mojo qui a été conçu pour être exécuté au plus une fois dans un build, quelque soit le nombre de projets qui sont construits. Il tire sa configuration du projet racine - habituellement le POM de plus haut niveau ou la ligne de commande. Quand il est rattaché à un cycle de vie, un mojo agrégateur peut provoquer de désagréables effets secondaires. Il peut forcer l'exécution de la phase package du cycle de vie en avance de phase, ce qui fait que le build exécute cette phase package deux fois.

    Comme le goal assembly:assembly est un mojo agrégateur, cela peut poser des problèmes avec les builds Maven multimodules et il doit donc être appelé seul en ligne de commande. Ne rattachez jamais l'exécution de assembly:assembly à une phase du cycle de vie. assembly:assembly était le goal originel du plugin Assembly et il n'a jamais été conçu pour faire partie du processus de build standard d'un projet. Quand il est devenu évident que les archives produites par assembly étaient une exigence légitime des projets, le mojo single a été développé. Ce mojo suppose qu'il a été rattaché à la bonne partie du processus de build et que, donc, il aura accès aux fichiers et artefacts du projet dont il a besoin pour s'exécuter au sein d'un grand projet Maven multimodule. Dans un environnement multimodule, il s'exécutera autant de fois qu'il est lié aux POMs des différents modules. Contrairement à assembly:assembly, single ne forcera jamais l'exécution d'une étape du cycle de vie en avance de phase.

    Le plugin Assembly propose plusieurs autres goals en plus de ces deux là. Cependant, le détail de ces autres mojos dépasse le cadre de ce chapitre, car ils servent pour des cas d'utilisation obsolètes ou exotiques : on a très rarement besoin d'eux. Autant que possible, pour produire vos packages utilisez assembly:assembly depuis la ligne de commande et single pour rattacher cette opération aux phases du cycle de vie.

    14.2.1. Les descripteurs Assembly prédéfinis

    Nombreux sont ceux qui choisissent de créer leurs propres recettes - appelées descripteurs d'assembly - cependant cela n'est pas forcément nécessaire. Le plugin Assembly fournit des descripteurs prêts à l'emploi pour plusieurs types d'archives communs. Vous pouvez donc les utiliser immédiatement sans écrire une ligne de configuration. Voici la liste des descripteurs d'assembly prédéfinis dans le plugin Maven Assembly :

    bin

    Le descripteur bin est utilisé pour packager les fichiers LICENSE, README et NOTICE du projet avec son artefact principal, pour peu que ce dernier soit un jar. Vous pouvez voir cela comme la plus petite distribution binaire pour un projet autosuffisant.

    jar-with-dependencies

    Le descripteur jar-with-dependencies construit une archive JAR avec le contenu du jar du projet principal et les contenus des dépendances d'exécution de ce projet. Associé avec la bonne définition de la Main-Class dans le fichier Manifest (dont on parle dans “Configuration du Plugin” ci-dessous), ce descripteur permet de produire un jar exécutable autosuffisant votre projet, même si ce dernier possède des dépendances.

    project

    Le descripteur project construit une archive à partir de la structure de répertoire du projet telle qu'elle existe sur votre système de fichier, et probablement dans votre outil de gestion de configuration. Bien sûr, le répertoire target n'est pas pris en compte ainsi que les fichiers de métadonnées comme les répertoires CVS et .svn que nous avons l'habitude de voir. En bref, le but de ce descripteur est de créer une archive du projet qui, une fois décompressée, permet de construire le projet avec Maven.

    src

    Le descripteur src produit une archive du code source de votre projet avec les fichiers pom.xml, ainsi que les éventuels fichiers LICENSE, README et NOTICE qui se trouvent dans le répertoire racine du projet. Ce descripteur produit une archive qui peut être construite par Maven dans la plupart des cas. Cependant, il suppose que tout le code source et les ressources soient dans le répertoire standard src et donc, qu'il peut oublier les fichiers et les répertoires non-standards même s'ils sont critiques pour le build.