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


    4.13. Construire une application packagée et exécutable en ligne de commande

    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.

    4.13.1. Rattacher le goal Assembly à la phase Package

    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.