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.3. Activation de profil

    Dans la section précédente, nous vous avons présenté comment créer un profil qui redéfinit le comportement par défaut selon un environnement cible spécifique. Le build précédent était configuré par défaut pour le développement, et le profil production existe pour apporter les éléments de configuration propres à l'environnement de production. Que se passe t'il si vous devez adapter votre build selon le système d'exploitation ou la version du JDK ? Maven fournit un mécanisme pour "activer" un profil selon différents paramètres liés à l'environnement, c'est ce qu'on appelle l'activation de profil.

    Prenons l'exemple suivant, supposons que nous avons une bibliothèque Java dont certaines fonctions ne sont disponibles que pour Java 6 et son moteur de scripts défini dans la JSR-223. Une fois que vous avez séparé le bloc de code qui utilise le moteur de scripts dans un projet Maven à part, vous voulez que les personnes qui utilisent Java 5 puissent construire votre projet sans essayer de construire l'extension spécifique Java 6. Vous pouvez faire cela au moyen d'un profil Maven qui ajoute le module de gestion des scripts uniquement lorsque le build se fait sur un JDK Java 6. Tout d'abord, jetons un oeil à la structure des répertoires de notre projet et comment nous souhaitons que les développeurs construisent notre système.

    Lorsque l'on exécute la commande mvn install avec un JDK Java 6, nous voulons que le build construise le projet simple-script. Si par contre cette commande est exécutée sur Java 5 il faut exclure le projet simple-script du build. Si vous n'excluez pas le projet simple-script de votre build en Java 5, celui-ci va échouer car Java 5 ne fournit pas la classe ScriptEngine. Étudions plus en détail le fichier pom.xml du projet de bibliothèque :

    Exemple 5.3. Inclusion dynamique de sous-modules par activation de profil

    <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>jdk16</id>
          <activation>
            <jdk>1.6</jdk>
          </activation>
          <modules>
            <module>simple-script</module>
          </modules>
        </profile>
      </profiles>
    </project>
    

    Si vous exécutez la commande mvn install en Java 6, vous vous apercevrez que Maven descend dans le sous-répertoire simple-script pour y construire le projet simple-script. Si vous exécutez la même commande mvn install en Java 5, le build n'essayera pas de construire le sous-module simple-script. Analysons cette configuration d'activation en détail :

    1

    La balise activation indique les conditions d'activation du profil. Dans cet exemple, nous avons indiqué que ce profil sera activé pour les versions de Java à partir de Java "1.6". Ce qui inclut donc "1.6.0_03", "1.6.0_02" ou tout autre version commençant par "1.6". Les conditions d'activation ne sont pas limitées à la version de Java, pour une liste complète des paramètres d'activation rendez-vous à la section Configuration de l'activation.

    2

    Nous ajoutons le module simple-script dans ce profil. L'ajout de ce module fait que Maven va aller regarder dans le sous-répertoire simple-script/ à la recherche d'un fichier pom.xml.

    5.3.1. Configuration de l'activation

    L'activation contient une ou plusieurs conditions sur les versions du JDK, les systèmes d'exploitation ou des propriétés. Un profil est activé lorsque toutes les conditions d'activation sont satisfaites. Par exemple, un profil peut indiquer comme conditions d'être sur un système d'exploitation Windows avec un JDK version 1.4. Ce profil ne sera donc activé que si le build est exécuté sur une machine Windows avec Java 1.4. Si le profil est actif, alors tous ses éléments surchargent les éléments correspondants du projet comme si ce profil était inclus via l'argument -P en ligne de commande. L'exemple suivant présente un profil qui n'est activé que par une combinaison très spécifique de propriétés, de version du JDK et de système d'exploitation.

    Exemple 5.4. Paramètres d'activation du profil : version du JDK, système d'exploitation et propriétés

    <project>
      ...
      <profiles>
        <profile>
          <id>dev</id>
          <activation>
            <activeByDefault>false</activeByDefault>1
            <jdk>1.5</jdk>2
            <os>
              <name>Windows XP</name>3
              <family>Windows</family>
              <arch>x86</arch>
              <version>5.1.2600</version>
            </os>
            <property>
              <name>mavenVersion</name>4
              <value>2.0.5</value>
            </property>
            <file>
              <exists>file2.properties</exists>5
              <missing>file1.properties</missing>
            </file>
          </activation>
          ...
        </profile>
      </profiles>
    </project>
    


    L'exemple précédent définit un ensemble très précis de paramètres d'activation. Regardons chacun d'entre eux plus en détail :

    1

    La balise activeByDefault contrôle si ce profil est actif par défaut.

    2

    Ce profil n'est actif que pour les versions du JDK commençant par "1.5". Ce qui inclut "1.5.0_01" et "1.5.1".

    3

    Ce profil cible aussi une version très spécifique de Windows XP, la version 5.1.2600 sur une plateforme 32-bit. Si votre projet utilise le plugin natif pour compiler du code en C, vous risquez de vous retrouver à écrire plusieurs projets suivant les plateformes.

    4

    La balise property indique à Maven qu'il doit activer ce profil si la propriété mavenVersion a pour valeur 2.0.5. La propriété mavenVersion est une propriété implicite qui est disponible pour tous les builds Maven.

    5

    La balise file nous permet d'activer un profil sur la présence (ou l'absence) d'un fichier. Le profil dev sera activé si un fichier file2.properties existe à la racine du projet. Le profil dev ne sera activé que s'il n'existe pas de fichier file1.properties à la racine du projet.