IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Maven Java Discussion :

Accéder à des properties définies dans un profile du pom parent


Sujet :

Maven Java

  1. #1
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 32
    Par défaut Accéder à des properties définies dans un profile du pom parent
    Bonjour à tous,

    Lorsque les développeurs build le projet que j'administre il utilise un profile1 par défaut dans le pom parent. Dans ce profile1 sont définies par des balises properties, les versions des artifactIds à utiliser pour la construction des modules.

    Dans un profile2 je définis d'autres numéros de versions pour le build.

    Le problème:

    Je fais un assembly sur un des modules (donc à partir d'un pom fils) mais le plugin assembly récupère les versions données dans le profile par défaut du parent.
    Comment faire pour indiquer l'utilisation de celles que j'ai définies dans le profile2?

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Par défaut
    tu peux activer le profile2 en utilisant la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mvn -P profile2 goal ...
    Mais si je comprends bien, ton profile1 est actif (<activation>...</activation>) en se basant sur des properties et non en définissant des properties... Voir la doc Maven sur le sujet : http://maven.apache.org/guides/intro...-profiles.html

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Août 2007
    Messages : 84
    Par défaut
    A mon sens, si le but est d'utiliser les valeurs définies dans le profil1 par défaut, et à la demande, d'utiliser celles du profil2, il faudrait faire ceci:

    Profil1 doit être actif par défaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <activation>
            <activeByDefault>true</activeByDefault>
    </activation>
    Profil2 ne doit pas l'être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <activation>
            <activeByDefault>false</activeByDefault>
    </activation>
    Quand tu lanceras une commande Maven2 (version 2.2+ au minimum je pense) sans profil spécifié, il utilisera bien les valeurs du profil1.

    Quand tu lanceras une commande avec l'option -Pprofil2, alors il désactivera les profils par défaut, donc le profil1.

    (Accessoirement, à quoi ça sert ce mécanisme de versions/profils ?)

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Par défaut
    Citation Envoyé par Tomekaa Voir le message
    Quand tu lanceras une commande avec l'option -Pprofil2, alors il désactivera les profils par défaut, donc le profil1.
    Je ne suis pas d'accord avec toi Tomekaa, le faut de demander le profil2 ne va pas désactiver les profiles par défaut.

    Un p'tit POM d'exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <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/xsd/maven-4.0.0.xsd">
     
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.bbe</groupId>
      <artifactId>test</artifactId>
      <version>1.0-SNAPSHOT</version>
     
      <profiles>
     
        <!-- Profile qui s'active automatiquement si la plateforme d'éxécution est de type Windows. -->
        <profile>
          <id>profile-1</id>
          <activation>
          	<os>
          	  <family>windows</family>
          	</os>
          </activation>
        </profile>
     
        <!-- Profile qui n'est pas actif par défaut, doit être activé explicitement. -->
        <profile>
          <id>profile-2</id>
          <properties>
            <test>debug</test>
          </properties>
        </profile>
     
      </profiles>
     
    </project>
    Si tu lances la commande pour lister les profiles actifs tu verras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $mvn help:active-profiles
    ...
    Active Profiles for Project 'com.bbe:test:jar:1.0-SNAPSHOT':
     
    The following profiles are active:
     
     - profile-1 (source: pom)
    Maintenant, si tu lances la commande en disant explicitement que tu actives le profil-2 tu obtiendras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $mvn help:active-profiles -P profile-2
    ...
    Active Profiles for Project 'com.bbe:test:jar:1.0-SNAPSHOT':
     
    The following profiles are active:
     
     - profile-1 (source: pom)
     - profile-2 (source: pom)
    Les profiles peuvent donc s'ajouter les uns aux autres

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Août 2007
    Messages : 84
    Par défaut
    le faut de demander le profil2 ne va pas désactiver les profiles par défaut.
    Attention à ne pas confondre
    • profils actifs par défaut
    • profils activés tout le temps parce que la propriété a toujours la valeur qu'on a mise dans notre joli petit pom


    Relance un peu ton test avec cette légère modif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <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/xsd/maven-4.0.0.xsd">
     
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.bbe</groupId>
      <artifactId>test</artifactId>
      <version>1.0-SNAPSHOT</version>
     
      <profiles>
     
        <!-- Profil par défaut -->
        <profile>
          <id>profile-1</id>
          <activation>
          	<activeByDefault>true</activeByDefault>  
          </activation>
        </profile>
     
        <!-- Profile qui n'est pas actif par défaut, doit être activé explicitement. -->
        <profile>
          <id>profile-2</id>
          <properties>
            <test>debug</test>
          </properties>
        </profile>
     
      </profiles>
     
    </project>

  6. #6
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 32
    Par défaut
    Merci pour vos réponses,

    En fait la partie que j'ai dû mal expliquer est surtout que la commande mvn qui pose problème, est à réaliser à partir du pom d'un module pas du pom parent!

    D'abord, c'est intéressant ce qu'il dit tomeka.
    J'étais un peu confus et j'ai testé. on obtient bien sur son pom avec mvn help:active-profiles -P profile-2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Active Profiles for Project 'com.bbe:test:jar:1.0-SNAPSHOT':
     
    The following profiles are active:
     
     - profile-2 (source: pom)
    Donc il ne faut pas confondre un profile par défaut et profile déclenché tout le temps.

    Mais je ré-explique mon problème.

    Dans mon profile-2, parce que je suis sur un autre environnement, j'ai des properties qui spécifient pour certaines dépendances des versions différentes à utiliser. Voici un rapide exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <profiles>
            <profile>
    	<id>profile1</id>
    		<properties>
    			<version.dep>1.0.0</version.dep>
    		</properties>
    		<activation>
    			<activeByDefault>true</activeByDefault>
    		</activation>
    	</profile>
     
    	<profile>
    		<id>profile2</id>		
    		<properties>
    			<version.dep>2.0.0</version.dep>
    		</properties>
    		<activation>
    			<activeByDefault>false</activeByDefault>
    		</activation>
    	</profile>
    </profiles>
    Si je fais le build avec le profile2 c'est bien la version.dep 2 qui sera utilisée par les modules.

    Le problème est que j'ai un assembly à faire à partir d'un module.

    Cet assembly récupère dans ${version.dep} la valeur qui est dans le pom parent.
    C'est normal mais il récupère 1.0.0 par le profile1 qui est par défaut.
    Je voudrais indiquer en lançant ma commande sur ce module qu'il faudrait prendre le profile2 du pom parent pour qu'il récupère la version 2.0.0

    Vous voyez le truc? C'est faisable, vous pensez?

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Par défaut
    Citation Envoyé par Tomekaa Voir le message
    Attention à ne pas confondre
    • profils actifs par défaut
    • profils activés tout le temps parce que la propriété a toujours la valeur qu'on a mise dans notre joli petit pom

    ...
    Autant pour moi, je suis allé un peu trop vite en besogne... Effectivement, le site de Maven décrit ce comportement "This profile will automatically be active for all builds unless another profile in the same pom is activated using one of the previously described methods. All profiles that are active by default are automatically deactivated when a profile in the pom is activated on the command line or through its activation config"

    Citation Envoyé par decode
    Vous voyez le truc? C'est faisable, vous pensez?
    Oui je pense, je regarde...

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Par défaut
    J'ai trouvé des infos sur le sujet (http://maven.40175.n5.nabble.com/Pro....html#a8259757)

    Voici les 2 poms d'exemple :

    Le POM parent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <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/xsd/maven-4.0.0.xsd">
     
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.bbe</groupId>
      <artifactId>test-parent</artifactId>
      <version>1.0-SNAPSHOT</version>
      <name>POM Parent</name>
      <packaging>pom</packaging>
     
      <modules>
    	<module>test-child</module>
      </modules>
     
      <profiles>
     
        <!-- Profil par défaut -->
        <profile>
          <id>profile-1</id>
          <activation>
          	<activeByDefault>true</activeByDefault>  
          </activation>
          <properties>
            <my.property>profile #1</my.property>
          </properties>
        </profile>
     
        <!-- Profile qui n'est pas actif par défaut, doit être activé explicitement. -->
        <profile>
          <id>profile-2</id>
          <properties>
            <my.property>profile #2</my.property>
          </properties>
        </profile>
     
      </profiles>
     
    </project>
    Et le POM enfant (module) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <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/xsd/maven-4.0.0.xsd">
     
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.bbe</groupId>
      <artifactId>test-child</artifactId>
      <version>1.0-SNAPSHOT</version>
      <name>POM Child</name>
     
      <parent>
    	  <groupId>com.bbe</groupId>
    	  <artifactId>test-parent</artifactId>
    	  <version>1.0-SNAPSHOT</version>
      </parent>
     
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.6</version>
            <executions>
              <execution>
                <id>compile</id>
                <phase>initialize</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target>
                    <echo>${my.property}</echo>
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
     
    </project>
    lorsque l'on demande à Maven la liste des profiles actifs sur le
    "POM Child" en utilisant les commandes de mon premier post on obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $mvn help:active-profiles
    ...
    Active Profiles for Project 'com.bbe:test-parent:pom:1.0-SNAPSHOT':
     
    The following profiles are active:
     
     - profile-1 (source: pom)
     
     
    Active Profiles for Project 'com.bbe:test-child:jar:1.0-SNAPSHOT':
     
    There are no active profiles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $mvn help:active-profiles -P profile-2
    ...
    Active Profiles for Project 'com.bbe:test-parent:pom:1.0-SNAPSHOT':
     
    The following profiles are active:
     
     - profile-2 (source: pom)
     
     
    Active Profiles for Project 'com.bbe:test-child:jar:1.0-SNAPSHOT':
     
    There are no active profiles.

    Par contre (comme indiqué dans le lien trouvé sur la toile), les effets des profiles actifs sont eux effectifs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $mvn compile
    ...
    [INFO] Building POM Parent 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building POM Child 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-antrun-plugin:1.6:run (compile) @ test-child ---
    [INFO] Executing tasks
     
    main:
         [echo] profile #1
    ...
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $mvn compile -P profile-2
    ...
    [INFO] Building POM Parent 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building POM Child 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-antrun-plugin:1.6:run (compile) @ test-child ---
    [INFO] Executing tasks
     
    main:
         [echo] profile #2
    ...
    Bizarre...

  9. #9
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 32
    Par défaut
    Merci pour le coup de main!
    C'était une bonne piste qui m'a fait prendre conscience que j'avais lu un problème semblable et que je pouvais essayer d'adapter l'idée:

    http://www.developpez.net/forums/d96...rofile-module/

    Certes, si on vérifie avec help:active-profiles on constate que le pom enfant ne considère pas le profile du parent comme actif (i.e. même s'il y en a un).

    Mais ça ne me gêne pas en réalité. Tout ce qui compte c'est que je peux activer le profile du pom parent à partir du pom enfant en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mvn initialize -Pprofile-2
    Ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [INFO] Building POM Child
    [INFO]    task-segment: [initialize]
    [INFO] ------------------------------------------------------------------------
    [INFO] [antrun:run {execution: compile}]
    [INFO] Executing tasks
     
    main:
         [echo] profile #2
    [INFO] Executed tasks
    Merci pour l'aide

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Par défaut
    N'oublie pas le tag résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appeler dans une requête des variables définies dans une macro
    Par piflechien73 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/08/2009, 16h12
  2. [Débutant] accéder à des variables partagées dans différents fichiers
    Par jane40 dans le forum MATLAB
    Réponses: 16
    Dernier message: 24/04/2009, 16h17
  3. Réponses: 2
    Dernier message: 08/12/2008, 19h20
  4. Réponses: 3
    Dernier message: 24/08/2008, 04h30
  5. Réponses: 2
    Dernier message: 13/04/2007, 14h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo