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


    5.2. Portabilité grâce aux profils Maven

    Un profil dans Maven est un ensemble alternatif de valeurs qui définissent ou surchargent les valeurs par défaut. En utilisant un profil, vous pouvez personnaliser un build pour différents environnements. Les profils sont configurés dans le fichier pom.xml et possèdent un identifiant. Vous pouvez ensuite exécuter Maven en précisant sur la ligne de commande le profil à utiliser. Le pom.xml suivant utilise un profil production pour écraser les paramètres par défaut du plugin Compiler.

    Exemple 5.1. Surcharge des paramètres de compilation en production par un profil Maven

    <project xmlns="http://maven.apache.org/POM/4.0.0" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                          http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>org.sonatype.mavenbook</groupId>
      <artifactId>simple</artifactId>
      <packaging>jar</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>simple</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
      <profiles>
        <profile>
          <id>production</id>
          <build>
            <plugins>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                  <debug>false</debug>
                  <optimize>true</optimize>
                </configuration>
              </plugin>
            </plugins>
          </build>
        </profile>
      </profiles>
    </project>
    

    Dans cet exemple, nous avons ajouté un profil nommé production pour surcharger la configuration par défaut du plugin Maven Compiler. Examinons la syntaxe de ce profil en détail.

    1

    L'élément profiles est dans le pom.xml, il contient un ou plusieurs éléments profile. Puisque les profils écrasent les paramètres par défaut du pom.xml, l'élément profiles est habituellement positionné en fin de pom.xml.

    2

    Chaque profil doit avoir un élément id. Cette balise id contient le nom qui est utilisé pour invoquer ce profil en ligne de commande. Un profil est invoqué en passant l'argument -P<profile_id> à la ligne de commande Maven.

    3

    Un élément profile peut contenir de nombreux éléments présents dans l'élément project d'un POM. Dans cet exemple, nous surchargeons le comportement du plugin Compiler et nous devons écraser la configuration du plugin qui se trouve normalement dans l'élément build/plugins.

    4

    Nous surchargeons la configuration du plugin Maven Compiler. Nous nous assurons que le bytecode produit par le profil de production ne contient pas les informations de débogage et qu'il a été optimisé par le compilateur.

    Pour exécuter la commande mvn install avec le profil de production, vous devez passer l'argument -Pproduction en ligne de commande. Pour vérifier que le profil de production surcharge la configuration par défaut du plugin Compiler, exécutez Maven avec les options de debug (-X) activées :

    ~/examples/profile $ mvn clean install -Pproduction -X
    ... (omitting debugging output) ...
    [DEBUG] Configuring mojo 'o.a.m.plugins:maven-compiler-plugin:2.0.2:testCompile'
    [DEBUG]   (f) basedir = ~\examples\profile
    [DEBUG]   (f) buildDirectory = ~\examples\profile\target
    ...
    [DEBUG]   (f) compilerId = javac
    [DEBUG]   (f) debug = false
    [DEBUG]   (f) failOnError = true
    [DEBUG]   (f) fork = false
    [DEBUG]   (f) optimize = true
    [DEBUG]   (f) outputDirectory = \
              ~\svnw\sonatype\examples\profile\target\test-classes
    [DEBUG]   (f) outputFileName = simple-1.0-SNAPSHOT
    [DEBUG]   (f) showDeprecation = false
    [DEBUG]   (f) showWarnings = false
    [DEBUG]   (f) staleMillis = 0
    [DEBUG]   (f) verbose = false
    [DEBUG] -- end configuration --
    ... (omitting debugging output) ...
    

    Cet extrait de la sortie en mode debug de Maven nous montre la configuration du plugin Compiler avec le profil de production. Comme nous pouvons le voir, la variable debug est à false et la variable optimize est à true.

    5.2.1. Surcharger un POM

    L'exemple précédent vous a montré comment surcharger la configuration par défaut d'un plugin Maven seul, cependant vous ignorez toujours ce qu'il est possible de faire avec un profil Maven. Pour faire court, un profil Maven peut surcharger presque tout ce que vous pouvez trouver dans un fichier pom.xml. Le POM Maven possède une balise appelée profiles qui contient les différentes configurations d'un projet, et dans cette balise se trouve une balise profile qui définit chacun d'entre eux. Chaque profil doit avoir une balise id, cela mit à part, il peut contenir presque tous les éléments que l'on peut trouver sous la balise project. Le document XML qui suit nous montre toutes les balises qu'un profil peut surcharger.

    Exemple 5.2. Balises autorisées dans un profil

    <project>
      <profiles>
        <profile>
          <build>
            <defaultGoal>...</defaultGoal>
            <finalName>...</finalName>
            <resources>...</resources>
            <testResources>...</testResources>
            <plugins>...</plugins>
          </build>
          <reporting>...</reporting>
          <modules>...</modules>
          <dependencies>...</dependencies>
          <dependencyManagement>...</dependencyManagement>
          <distributionManagement>...</distributionManagement>
          <repositories>...</repositories>
          <pluginRepositories>...</pluginRepositories>
          <properties>...</properties>
        </profile>
      </profiles>
    </project>
    


    Un profil peut donc redéfinir tous ces éléments. Il peut redéfinir le nom de l'artefact final, les dépendances et le build d'un projet en surchargeant la configuration des plugins. Un profil peut aussi redéfinir les paramètres de distribution. Par exemple, si pour une étape de validation vous devez publier vos artefacts sur un serveur de pré-production, vous allez créer un profil de validation qui va surcharger la balise distributionManagement.