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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 46
    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 : 46
    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
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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...

  7. #7
    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?

+ 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