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


    6.5. Construction du projet multimodule

    Nous venons de créer le projet simple-weather qui contient le code interagissant avec le service Yahoo! Météo et le projet simple-webapp qui contient une simple servlet de présentation. C'est le moment de compiler et de packager notre application sous la forme d'un fichier WAR. Pour cela, vous devez compiler et installer les deux projets précédemment créés dans un ordre précis. Comme le projet simple-webapp dépend du projet simple-weather, nous devons transformer ce dernier (simple-weather) en JAR avant de pouvoir compiler la webapp. Pour ce faire, utilisons la commande mvn clean install à partir du projet de plus haut niveau simple-parent :

    ~/examples/ch-multi/simple-parent$ mvn clean install
    [INFO] Scanning for projects...
    [INFO] Reactor build order: 
    [INFO]   Simple Parent Project
    [INFO]   simple-weather
    [INFO]   simple-webapp Maven Webapp
    [INFO] ----------------------------------------------------------------------
    [INFO] Building simple-weather
    [INFO]    task-segment: [clean, install]
    [INFO] ----------------------------------------------------------------------
    [...]
    [INFO] [install:install]
    [INFO] Installing simple-weather-1.0.jar to simple-weather-1.0.jar
    [INFO] ----------------------------------------------------------------------
    [INFO] Building simple-webapp Maven Webapp
    [INFO]    task-segment: [clean, install]
    [INFO] ----------------------------------------------------------------------
    [...]
    [INFO] [install:install]
    [INFO] Installing simple-webapp.war to simple-webapp-1.0.war
    [INFO] 
    [INFO] ----------------------------------------------------------------------
    [INFO] Reactor Summary:
    [INFO] ----------------------------------------------------------------------
    [INFO] Simple Parent Project ............................... SUCCESS [3.041s]
    [INFO] simple-weather ...................................... SUCCESS [4.802s]
    [INFO] simple-webapp Maven Webapp .......................... SUCCESS [3.065s]
    [INFO] ----------------------------------------------------------------------
    

    Lorsque Maven est exécuté dans un projet avec des sous-modules, il commence par charger le POM parent et localiser tous les POMs des sous-modules. Maven regroupe alors tous ces POMs dans le plugin Maven Reactor. Il s'agit d'un plugin chargé d'analyser les dépendances entre les modules. Le plugin Reactor s'occupe de l'ordonnancement des composants pour garantir que les modules interdépendants soient compilés et installés dans le bon ordre.

    Note

    Le plugin Reactor préserve l'ordre des modules défini dans le POM à moins que des changements ne soient nécessaires. Une bonne technique pour comprendre ce mécanisme consiste à imaginer que les modules avec les dépendances inter projets soient descendus dans une liste jusqu'à ce que l'ordre des dépendances soit satisfaisant. Dans quelques rares occasions, il peut être bon de réarranger manuellement l'ordre de vos modules — par exemple si vous voulez qu'un module fréquemment instable soit remonté en début de build.

    Dès que le plugin Reactor a trouvé l'ordre dans lequel les projets doivent être construits, Maven exécute les goals indiqués pour chaque module afin d'effectuer le build du projet multimodule. Dans cet exemple, vous pouvez effectivement remarquer que Maven commence par construire le module simple-weather avant l'application web simple-webapp en exécutant la commande mvn clean install.

    Note

    Quand vous exécutez Maven à partir de la ligne de commande vous serez amenés à utiliser fréquemment la phase clean avant l'exécution d'autres phases du cycle de vie. Lorsque vous précisez clean sur la ligne de commande, vous vous assurez que Maven enlève les fichiers générés lors des builds précédents avant qu'il ne compile et package votre application. Exécuter la commande clean n'est pas nécessaire, mais c'est une précaution utile pour s'assurer que vous effectuez un "build propre".