| Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide Consultez : | ![]() |
Dans la section Section 4.8, « Exécuter le programme Simple Weather » un peu plus tôt dans ce chapitre, nous avons exécuté notre application avec le plugin Maven Exec. Même si ce plugin a permis d'exécuter le programme et d'obtenir des résultats, vous ne devriez pas voir Maven comme un moyen d'exécuter vos applications. Si vous distribuez cette application en ligne de commande, vous voudrez probablement distribuer un JAR ou une archive de type ZIP ou TAR GZIP. Cette section décrit un processus d'utilisation d'un descripteur d'assemblage prédéfini avec le plugin Maven Assembly pour produire un fichier JAR distribuable, qui contienne le bytecode du projet ainsi que toutes ses dépendances.
Le plugin Maven Assembly est un plugin qui vous permet de créer toutes les distributions que vous voulez pour
vos applications. Vous pouvez utiliser le plugin Maven Assembly en définissant un descripteur d'assemblage personnalisé
pour produire n'importe quel format distribuable de votre projet comme vous le voulez. Dans l'un des chapitres
suivants, nous vous montrerons comment créer un descripteur d'assemblage personnalisé pour produire une archive plus
complexe pour l'application Simple Weather. Dans ce chapitre, nous nous contenterons d'utiliser le format prédéfini
jar-with-dependencies. Pour configurer le plugin Maven Assembly, nous devons ajouter le
configuration de plugin suivante à notre configuration de build existante dans le
pom.xml.
Exemple 4.20. Configurer le descripteur Maven Assembly
<project>
[...]
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>
Une fois que vous avez ajouté cette configuration, vous pouvez construire l'assemblage en exécutant le goal
assembly:assembly. Dans les traces affichées à l'écran, le goal
assembly:assembly est exécuté une fois que le build Maven atteint la phase
install du cycle de vie :
$ mvn install assembly:assembly
...
[INFO] [jar:jar]
[INFO] Building jar:
~/examples/ch-custom/simple-weather/target/simple-weather-1.0.jar
[INFO] [assembly:assembly]
[INFO] Processing DependencySet (output=)
[INFO] Expanding: \
.m2/repository/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar into \
/tmp/archived-file-set.1437961776.tmp
[INFO] Expanding: .m2/repository/commons-lang/commons-lang/2.1/\
commons-lang-2.1.jar
into /tmp/archived-file-set.305257225.tmp
... (Maven Expands all dependencies into a temporary directory) ...
[INFO] Building jar: \
~/examples/ch-custom/simple-weather/target/\
simple-weather-1.0-jar-with-dependencies.jar
Une fois que notre application est assemblée dans
target/simple-weather-1.0-jar-with-dependencies.jar,
nous pouvons de nouveau lancer la classe Main depuis la ligne de commande. Pour lancer la
classe Main de l'application Simple Weather, exécutez les commandes suivantes depuis le
répertoire racine de votre projet.
$ cd target $ java -cp simple-weather-1.0-jar-with-dependencies.jar \ org.sonatype.mavenbook.weather.Main 10002 0 INFO YahooRetriever - Retrieving Weather Data 221 INFO YahooParser - Creating XML Reader 399 INFO YahooParser - Parsing XML Response 474 INFO WeatherFormatter - Formatting Weather Data ********************************* Current Weather Conditions for: New York, NY, US Temperature: 44 Condition: Fair Humidity: 40 Wind Chill: 40 *********************************
Le format jar-with-dependencies crée un unique fichier JAR qui contient
tout le bytecode du projet simple-weather ainsi que celui des dépendances désassemblées. Ce
format assez original produit un fichier JAR de 9 MiB qui contient environ 5.290 classes, mais il
facilite la distribution des applications développées avec Maven. Plus tard dans ce livre, nous vous montrerons
comment créer votre propre descripteur d'assemblage pour produire une distribution plus standard.
Dans Maven 1, un build était personnalisé en chaînant à la suite les goals de plugin. Chaque goal de plugin
avait des prérequis et définissait sa relation aux autres goals de plugin. Maven 2 a introduit le concept de cycle
de vie. Maintenant, les goals de plugin sont liés à une série de phases d'un cycle de vie par défaut de Maven. Le
cycle de vie pose les bases solides qui facilitent la gestion et la prédiction des goals de plugin qui seront
exécutés lors d'un build. Dans Maven 1, les goals de plugin étaient reliés entre eux directement, avec Maven 2 les
goals sont liés à des étapes communes du cycle de vie. Même s'il est certainement valide d'exécuter un goal depuis
la ligne de commande comme nous l'avons déjà montré, configurer le plugin Assembly pour qu'il exécute le goal
assembly:assembly durant une phase du cycle de vie de Maven est plus
cohérent.
La configuration suivante configure le plugin Maven Assembly pour qu'il exécute le goal
attached durant la phase package du cycle de vie par défaut de Maven. Le
goal attached fait la même chose que le goal assembly. Pour rattacher le
goal assembly:attached à la phase package nous utilisons la balise
executions sous la balise plugin dans la section build du
POM du projet.
Exemple 4.21. Configurer l'exécution du goal attached durant la phase Package du cycle de vie
<project>
[...]
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>simple-command</id>
<phase>package</phase>
<goals>
<goal>attached</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>
Une fois votre POM configuré, tout ce qu'il vous reste à faire pour produire l'assemblage est d'exécuter la
commande mvn package. La configuration de l'exécution va s'assurer que le goal
assembly:attached est exécuté quand Maven atteint la phase
package durant son parcours du cycle de vie.