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 :

[Maven2] Externaliser les propriétés


Sujet :

Maven Java

  1. #1
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut [Maven2] Externaliser les propriétés
    Hello,

    Je souhaite externaliser le numéro de version de mon project Java dans un fichier properties.

    En gros, au lieu d'avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <project>
        ...
        <groupId>myGroup</groupId>
        <artifactId>myArtifact</artifactId>
        <version>1.0</version>
        ...
    Je souhaiterais avoir quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <project>
        ...
        <groupId>myGroup</groupId>
        <artifactId>myArtifact</artifactId>
        <version>${monProjet.version}</version>
        ...
    et dans un fichier properties:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monProjet.version=1.0
    J'ai réussi plus ou moins à le faire, sauf que la propriété définissant le numéro de version est stocké plus bas dans mon pom.xml. En gros, j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <project>
        ...
        <groupId>myGroup</groupId>
        <artifactId>myArtifact</artifactId>
        <version>${monProjet-version}</version>
        ...
        <properties>
            <monProjet-version>1.0</monProjet-version>
        </properties>
    </project>
    Cette méthode fonctionne, mais (pour certaines raisons), j'aimerais vraiment que cette information soit externalisée dans un fichier autre que le pom.xml.

    Je pense que les filtres ne sont pas applicables ici, n'est-ce pas ? Il me semble que les filtres ne sont pas prévus pour fonctionner sur le pom.xml lui-même, mais sur les fichiers de ressources...

    Merci.

  2. #2
    Membre habitué Avatar de marcxa44
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 202
    Points : 142
    Points
    142
    Par défaut
    Tu peux configurer tes propriétés dans le fichier settings.xml et les utiliser dans ton pom.xml mais je ne sais pas si ca te convient comme solution?

  3. #3
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Effectivement, c'est une possibilité que je connaissais déjà.

    Hélas, cela ne correspond pas exactement à mes besoins

    Je crains que ce que je désire faire soit tout simplement pas prévu par Maven...

  4. #4
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par romaintaz
    Je crains que ce que je désire faire soit tout simplement pas prévu par Maven...
    Réfléchissons dans l'autre sens. Tu peux nous expliquetr pourquoi tu as besoin de mettre la version dans un autre fichier que le POM?

  5. #5
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Bonjour,

    Pourquoi je veux faire cela ?

    En fait, la structure de mon projet est la suivante :
    * main (projet parent de type POM)
    ** sous-projet 1 (libraire, de type JAR)
    ...
    ** sous-projet 6
    ** sous-projet Web 1 (projet web, de type WAR)
    ...
    ** sous-projet Web 4

    Les 6 sous projets sont des librairies, et nous avons ensuite 4 projets web qui utilisent certaines (voire toutes) des 6 librairies en question.
    L'arbre de dépendances entre ces projets devient quelque peu complexe. Ainsi regrouper toutes les variables au sein d'un même endroit - un fichier properties en somme - serait profitable pour au moins deux raisons :
    • Praticité: Je change la version d'une librairie, je n'ai à faire qu'une seule fois la modification, et non X fois.
    • Sécurité: Si une librairie change de version, grâce à ce système, je n'aurais pas le cas où "j'oublie" de la changer dans un autre projet.


    Aujourd'hui, j'ai une solution qui répond presque à mes attentes :
    Mon projet POM parent (celui dont hérite tous les autres sous-pom), contient la liste des versions, sous forme de properties :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <project>
        ...
        <groupId>myGroup</groupId>
        <artifactId>myArtifact</artifactId>
        <version>${monProjet-version}</version>
        ...
        <properties>
            <projet1-version>1.0</projet1-version>
            <projet2-version>1.3</projet2-version>
            ...
        </properties>
    </project>
    Ainsi, par exemple si mon projet1 est dépendent du projet2, je définirais la dépendance ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        <dependency>
            <groupId>my.company.</groupId>
            <artifactId>projet1</artifactId>
            <version>${projet1-version}</version>
        </dependency>
    Ce système fonctionne très bien, c'est d'ailleurs celui que j'utilise actuellement. A un détail près :
    Tous mes sous projets définissent clairement la version du projet parent, cette version ne pouvant pas être mise en variable "globale". En effet, vu que les propriétés sont définies dans le pom parent, le pom enfant doit connaître la version du parent pour connaître les propriétés globales (donc les numéros de versions).

    Donc le seul inconvénient de ma méthode est que si je change la version du pom parent, je devrais la changer dans tous les pom enfants.
    Par contre, si je change la version d'une de mes librairies, alors je n'aurais à la changer que dans les propriétés du pom parent, et tout le monde sera impacté.

    Ma solution pour être complètement top, c'était de mettre les versions dans un fichier properties qui serait accessible par tous les poms, parent et enfants.
    Cette solution aurait permis, contrairement à ma solution actuelle, de répercuter à tous les poms un changement de version du projet parent.

    Et sinon, c'était aussi pour ma culture personnelle

  6. #6
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par romaintaz
    Donc le seul inconvénient de ma méthode est que si je change la version du pom parent, je devrais la changer dans tous les pom enfants.
    Par contre, si je change la version d'une de mes librairies, alors je n'aurais à la changer que dans les propriétés du pom parent, et tout le monde sera impacté.

    Ma solution pour être complètement top, c'était de mettre les versions dans un fichier properties qui serait accessible par tous les poms, parent et enfants.
    Cette solution aurait permis, contrairement à ma solution actuelle, de répercuter à tous les poms un changement de version du projet parent.

    Et sinon, c'était aussi pour ma culture personnelle
    J'ai effectivement le même problème que toi concernant la version du pom parent qui doit être changée dans tous les enfants, ce qui est assez lourd (sauf les rares fois ou le release plugin veux bien marcher, mais c'est rare).

    Pour le reste, je te félicite, tu as réinventé le dependencyManagement de Maven, qui sert, .... à faire ce que tu fais.
    Tu peux donc réintégrer tout ça dans du standard Maven en faisant, dans ton 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
     
    <project>
     
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>my.company</groupId>
            <artifactId>projet1</artifactId>
            <version>1.4</version>
            <type>jar</type>
            <scope>compile</scope>
          </dependency>
          .....
        </dependencies>
      </dependencyManagement>
    Puis dans tes enfants, tu peux utiliser cette dépendance sasn déclarer explicitement sa version. Celle ci sera résolue grace au dependencyMangement du parent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <project>
     
      <dependencies>
        <dependency>
          <groupId>my.company</groupId>
          <artifactId>projet1</artifactId>
        </dependency>
        ....
      </dependencies>
    Et tout ça remplace ton système à variables. Après, pour la version du POM parent, je n'ai pas encore trouvé de solution.

  7. #7
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Effectivement, c'est une chose à laquelle je n'avais pas pensé !

    Cela ne résoud toujours pas mon problème, mais c'est sans doute plus propre que ma solution de properties...

Discussions similaires

  1. externaliser les propriétés
    Par clement42 dans le forum Spring
    Réponses: 1
    Dernier message: 03/08/2006, 11h19
  2. Réponses: 4
    Dernier message: 29/11/2004, 16h51
  3. Comment retrouver les propriétés d'un fichier ?
    Par JuanLopez1966 dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 01/09/2004, 16h34
  4. Informations sur un exe (dans les propriétés windows)
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 06/07/2004, 18h20
  5. [VBA] Les propriétés de cellule dans Excel
    Par Kylen dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 05/07/2004, 23h02

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