| Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide Consultez : | ![]() |
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.
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 :
binLe 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-dependenciesLe 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.
projectLe 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.
srcLe 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.