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 :

Maven project Inheritance / Aggregation - Factoriser la version du projet


Sujet :

Maven Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut Maven project Inheritance / Aggregation - Factoriser la version du projet
    Bonjour,

    Mon application est composée de 2 parties : un jar et un war qui font l'objet de deux modules Maven et d'un module parent comme expliqué sur cette page : http://maven.apache.org/guides/intro...o-the-pom.html.

    Ma structure de dossiers est une structure à plat (i.e. le POM parent est au même niveau que les POM enfants) :
    app-parent
    my-app
    my-webapp

    Voici le code du POM parent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
      <groupId>com.mycompany.app</groupId>
      <artifactId>app</artifactId>
      <version>1.0</version>
      <packaging>pom</packaging>
     
      <modules>
        <module>../my-app</module>
        <module>../my-webapp</module>
      </modules>
    ...
    Lorsque j'effectue une nouvelle release de mon appli, je souhaiterais ne pas avoir à mettre à jour la version du POM parent dans les POM enfants.
    C'est pourquoi j'envisageais d'utiliser la variable ${project.version} comme expliqué dans le paragraphe "Project Interpolation and Variables" de la page web déjà indiquée.

    Par exemple voici, le code du pom.xml de my-app :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ...
      <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>app</artifactId>
        <version>${project.version}</version>
        <relativePath>../app-parent</relativePath>
      </parent>
     
      <!-- Pas de version spécifiée car héritée du parent -->
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <packaging>jar</packaging>
    ...
    Or, avec cette configuration, lorsque je lance un mvn clean install, Maven sort l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Non-resolvable parent POM: Could not transfer artifact com.mycompany.app:app:pom:${project.version}
    Il semble donc que la variable ${project.version} ne soit pas interprétée au préalable et sa valeur injectée dans le POM enfant.

    Auriez-vous une solution pour factoriser la déclaration de la version de mon application (et donc de tous les modules sous-jacents) au niveau du POM parent uniquement ?

    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    Bonjour,
    si tu veux accéder à la version du parent, tu utilises la propriété suivante:
    ${parent.version}
    Par ailleurs, si tu veux prendre toujours la version du pom parent, alors ce n'est pas la peine de spécifier la version dans les modules. Les modules hériteront automatiquement de la version du pom parent.

    Cordialement,
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut
    Merci pour ta réponse paissad.

    Si je ne mets pas la version du pom parent, Maven sort l'erreur suivante :

    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
     
    $ mvn clean install
    [INFO] Scanning for projects...
    [ERROR] The build could not read 2 projects -> [Help 1]
    [ERROR]
    [ERROR]   The project com.mycompany.app:my-app:[unknown-version] (C:\appli\dev\test\my-app\pom.xml) has 1 error
    [ERROR]     'parent.version' is missing. @ line 5, column 11
    [ERROR]
    [ERROR]   The project com.mycompany.app:my-webapp:[unknown-version] (C:\appli\dev\test\my-webapp\pom.xml) has 1 error
    [ERROR]     'parent.version' is missing. @ line 5, column 11
    [ERROR]
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR]
    [ERROR] For more information about the errors and possible solutions, please read the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
    POM de my-app :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>app</artifactId>
        <!-- PAS DE VERSION -->
        <relativePath>../app-parent</relativePath>
      </parent>
     
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <packaging>jar</packaging>
    Il semblerait donc que les modules n'aient pas hérité de la version du parent.

    ----------------------------

    D'autre part, si j'utilise la variable ${parent.version}, Maven sort une autre erreur laissant penser que la variable n'a pas été interprétée.

    POM :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      <parent>
        <groupId>com.mycompany.app</groupId>
        <artifactId>app</artifactId>
        <version>${parent.version}</version>
        <relativePath>../app-parent</relativePath>
      </parent>
     
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <packaging>jar</packaging>
    Erreur Maven :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [ERROR]   The project com.mycompany.app:my-app:${parent.version} (C:\appli\dev\test\my-app\pom.xml) has 1 error
    [ERROR]     Non-resolvable parent POM: Could not transfer artifact com.mycompany.app:app:pom:${parent.version} from/to central (http://repo.maven.apache.org/maven2): IllegalArgumen
    tException and 'parent.relativePath' points at wrong local POM @ line 5, column 11: Illegal character in path at index 59: http://repo.maven.apache.org/maven2/com/mycompany/app/app
    /${parent.version}/app-${parent.version}.pom -> [Help 2]
    Je m'y prends peut-être mal. Mais je ne vois pas. Merci d'avance pour votre aide.

  4. #4
    Membre confirmé
    Homme Profil pro
    Expert MDE
    Inscrit en
    Janvier 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Expert MDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 183
    Par défaut
    Hello,

    Pour changer de version, utilise le Maven-release-plugin.
    Il te permettra de garder tout ça cohérent

    Cordialement,

  5. #5
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <parent>
        <artifactId>foo-project</artifactId>
        <groupId>net.paissad.foo</groupId>
        <version>1.0.0</version>
      </parent>
      <artifactId>foo-common</artifactId>
      <name>foo-common</name>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foo-project/
                 |
                 + pom.xml
                 |
                 + foo-common/
                                   |
                                   + pom.xml
    Voici ce que j'ai et ça marche.
    Par ailleurs, je m'excuse, il faut en effet mettre le numéro de version du parent dans les modules.
    Ceci dit, il faut aussi savoir que ce n'est pas obligatoire de spécifier le répertoire du parent si jamais il se trouve à un niveau au dessus. (ici foo-project est aussi le répertoire parent de foo-common

    Cordialement,
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/10/2008, 15h59
  2. Maven ne me prends pas la version maj du CSS
    Par M€lK!oR dans le forum Maven
    Réponses: 4
    Dernier message: 07/05/2008, 14h36
  3. Réponses: 16
    Dernier message: 27/02/2008, 09h12
  4. [Continuum] Build Error : Could not find Maven project descriptor
    Par CharlSka dans le forum Intégration Continue
    Réponses: 1
    Dernier message: 15/01/2007, 11h22
  5. [PMD] [Maven] Problème avec le plugin en version 3.7
    Par sollda dans le forum Qualimétrie
    Réponses: 1
    Dernier message: 26/11/2006, 21h57

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