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 :

Utiliser les propriétés Maven dans le code


Sujet :

Maven Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Par défaut Utiliser les propriétés Maven dans le code
    Bonjour,

    je souhaiterais utiliser un ensemble de propriétés Maven2 directement dans le code Java. Typiquement, j'ai une fonction getVersion (actuellement codée en dur) qui devrait retourner la valeur se trouvant dans la balise version du pom.xml.

    Je pensais pouvoir faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public String getVersion() {
       return "${project.version}";
    }
    en pensant que le ${project.version} serait automatiquement remplacé par Maven à la compilation. Mais il semblerait que cela ne fonctionne pas comme cela.

    En recherchant sur les différentes pages Web, je pense avoir compris que Maven remplace les ${...} dans le pom.xml et les ressources au moment de la compilation uniquement, sans écrire les valeurs dans les fichiers. Ces valeurs ne sont donc pas accessibles à l'exécution.

    Me confirmez-vous cela ? Avez-vous une solution pour accéder aux données du pom.xml dynamiquement dans le code (j'ai également recherché du côté des MOJO sans succès) ?

    Merci par avance,
    MiniMarch'

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

    Informations forums :
    Inscription : Août 2007
    Messages : 84
    Par défaut
    Bonjour,

    A mon sens, pour réaliser ce type d'opération, il faut opérer en 2 temps :

    1) Filtrer les sources et les placer dans un dossier sous target :
    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
     
    (...)
      <build>
        (...)
          <resources>
              <resource>
                  <directory>src/main/java</directory>
                  <filtering>true</filtering>
                  <targetPath>../filtered-sources/java</targetPath>
              </resource>
              <resource>
                  <directory>src/main/resources</directory>
                  <filtering>true</filtering>
              </resource>
          </resources>
        (...)
        </build>
    2) Ensuite utiliser ces sources filtrées à la place des "normales" comme répertoire pour le compilateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      (...)
      <build>
          (...)
          <sourceDirectory>target/filtered-sources/java</sourceDirectory>
          (...)
      </build>
      (...)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Par défaut
    OK, je crois comprendre ce que tu me conseilles. Mais me confirmes-tu que les valeurs seront écrites dans les fichiers finaux, en dur, afin qu'elles puissent être utilisées durant l'exécution ?

    J'ai un doute concernant ce point, mais je n'arrive pas à trouver la documentation confirmant ou infirmant ce doute.

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

    Informations forums :
    Inscription : Août 2007
    Messages : 84
    Par défaut
    Utilisé comme cela, les propriétés maven seront effectivement présentes dans les classes compilées.

    Note que j'ai modifié un peu le code du point 1) (à cause d'un targetPath toujours relatif à target/classes)

  5. #5
    Membre chevronné

    Inscrit en
    Septembre 2006
    Messages
    466
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 466
    Par défaut
    Bonjour,

    Au lieu de filtrer les sources java (un peu risqué à mon avis), j'utiliserai plutôt un fichier de propriétés que je filtrerais avec maven 2 et ma classe java accèderais à ce fichier de propriétés.

    Rémy

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Par défaut


    Tout fonctionne pour le mieux, merci infiniment.

    J'en profites pour te poser un petite question supplémentaire : si je ne veux filtrer qu'une seule classe, y a-t-il un moyen d'indiquer de ne parser qu'un seul fichier précis ?

    J'avais également essayer de le faire dans un fichier de propriétés, sans succès. Mais je viens de réessayer, il semble que je m'étais fourvoyé dans la valeur de la propriété. En tout cas, tout fonctionne pour le mieux.

    Merci pour vos réponses.

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

    Informations forums :
    Inscription : Août 2007
    Messages : 84
    Par défaut
    si je ne veux filtrer qu'une seule classe, y a-t-il un moyen d'indiquer de ne parser qu'un seul fichier précis ?
    Dans ce cas (et en général), comme le dit Rémy, il est nettement plus souhaitable d'utiliser un fichier properties.

    Il serait à placer dans src/main/resources/chemin_du_package et il suffit d'ajouter le filtering des resources :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    (...)
      <build>
        (...)
          <resources>
              <resource>
                  <directory>src/main/resources</directory>
                  <filtering>true</filtering>
              </resource>
          </resources>
        (...)
        </build>
        (...)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Par défaut
    Je suis en train de terminer mes différents tests, mais c'est vers cette solution que je me dirige.

    Merci.

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

Discussions similaires

  1. Utiliser les variables maven dans un fichier docx
    Par sekaijin dans le forum Maven
    Réponses: 3
    Dernier message: 18/02/2015, 18h32
  2. [Sonar] [Maven] Utiliser les règles définies dans un pom
    Par Krishtov dans le forum Qualimétrie
    Réponses: 0
    Dernier message: 11/10/2011, 17h42
  3. Projet VB v6 : utilisation de requête SQL dans mon code
    Par MITCH31 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 27/10/2005, 15h02
  4. [vb.net] utilisation d'une variable dans le code
    Par arnolem dans le forum Windows Forms
    Réponses: 9
    Dernier message: 30/09/2005, 19h22
  5. Réponses: 2
    Dernier message: 17/09/2005, 17h43

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