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 :

Comment gérer des configurations héritées d'un parent


Sujet :

Maven Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut Comment gérer des configurations héritées d'un parent
    bonjour à tous
    je ne suis pas un spécialiste Maven mais je l'utilise sur un gros gros projet hyper compliqué..... et je souffre
    voilà une description (compliquée) de problème typique:
    j'ai un ensemble de codes (module maven) appelons le "ModuleCentral"
    ce module à un parent maven "ParentA" qui définit des tas de choses, et en particulier des variables de version pour un autre module "TopUtils" et aussi une dépendance à ce module "TopUtils" (avec la bonne version).
    maintenant (pourquoi faire simple) TopUtils a comme dépendant "UtilA"

    état initial:
    ParentA -1.4.5
    ---TopUtils - 1.0.3
    ------UtilA -1.0.4
    ModuleCentral - 1.4.7

    là où ça devient chaud:
    je modifie UtilA -> 1.O.5-SNAPSHOT
    et je veux tester ModuleCentral qui utilise les services de "UtilA"
    donc
    ModuleCentral-> 1.4.8-SNAPSHOT (changement du parent)
    ParentA-> 1.4.6-SNAPSHOT (changement variable version TopUtils)
    TopUtils-> 1.0.4-SNAPSHOT (changement version dependance vers UtilA)

    ça va pas besoin d'aspirine?
    j'ai généré UtilA et testé
    et maintenant je fais des modifs dans "ModuleCentral" qui va utiliser les
    nouveaux services de "UtilA"
    et là maven ne me compile pas avec la bonne version et ça plante.

    Je suis naïf au point de penser que ces dépendances (compliquées mais pas de ma faute) pouvaient être gérées par Maven.
    apparemment pas: maven sait "descendre" dans les dépendances mais ne remonte pas.
    Il n'y a pas de notion "d'héritage".
    Bon si c'est codé dans les gênes ...
    mais c'est extrèmement ennuyeux (ceci est un exemple simplifié!)
    y a t'il un utilitaire qui me permettrait de me mettre dans le contexte de "ModuleCentral" et de lui dire "compile toi avec la nouvelle version de UtilA! point à la ligne" (sinon il faut que je passe mon temps à cherche le chemin des dépendances et héritage et regénérer tous les modules intermédiaire!)
    merci pour toute suggestion

  2. #2
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    bonjour,

    Je suis justement en train de me prendre aussi la tête et si ça peu t'aider j'ai lu ça :

    Une des choses qui est pas toujours bien comprise est que l'architecture des projets maven 2 est très dépendante du cycle de vie (au sens release) de différents artefacts.

    Pour être plus claire, lorsque tu as plusieurs artefacts, comment choisir entre :

    un projet multi-modules
    plusieurs projets simples
    plusieurs projets multi-modules ou simples


    Une des réponses est lié au cycle de vie des artefacts.

    Tu regroupes dans un projet multi-modules l'ensemble de tes artefacts qui vont toujours suivre la même version (donc tu vas toujours les releaser en même temps avec la même version). Si a un moment tu souhaites faire une release que d'un module de ce projet, cela veut dire qu'il a son propre cycle de vie et donc qu'il faut envisager de le sortir pour créer un projet propre.

    Lorsque tes artefacts ont des cycles de vie différents alors tu fais des projets différents.
    ça vient de ce poste :
    http://www.developpez.net/forums/d81...sophie-resolu/

    Donc je dirais que ce n'est pas logique que tu es des modules "enfants" avec des versions différentes de celle du parent.
    Il semblerait que si tu as un cycle de vie différent pour ton module il doit être sortie dans un autre projet et ensuite tu ajoutes ta dépendance comme une librairie classique.

    Je suis pas expert sur le sujet donc si quelqu'un peut confirmer ?
    en tout cas c'est déjà une piste

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur Java / JEE
    Inscrit en
    Février 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java / JEE

    Informations forums :
    Inscription : Février 2008
    Messages : 185
    Par défaut
    Bonjour,

    Je ne suis pas très sûr d'avoir compris, mais ModuleCentral devrait avoir dans sa liste de dépendances TopUtils et UtilA.
    De manière générale en Maven, il est nécessaire de recompiler tous tes projets depuis la racine au moins une fois avec les nouvelles versions pour que tu puisses avoir un parent quand tu fais un compilation partielle.
    Tu peux aussi avoir des problèmes si tes poms définissent une version dynamique dans la déclaration. Ce n'est plus autorisé en Maven 3.
    Peut-être que tu pourrais nous poster une partie de tes pom.xml ?

    Mathieu

  4. #4
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Avant d'aller plus loin, une question (déjà posée) : il semble que tout cet ensemble ne soit qu'un seul et unique projet (certes divisé en plusieurs modules Maven). Du coup, pourquoi ne pas avoir la même version partout ?
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par romaintaz Voir le message
    Avant d'aller plus loin, une question (déjà posée) : il semble que tout cet ensemble ne soit qu'un seul et unique projet (certes divisé en plusieurs modules Maven). Du coup, pourquoi ne pas avoir la même version partout ?
    C'est un très gros projet, avec de nombreuses parties développées à des bouts différents de la planête et qui ne suivent pas le même rythme.
    Les autres programmeurs ont en général un seul multi-module dans lequel les sous modules suivent la même version.
    Pour les autres composants c'est une autre histoire ... et c'est moi qui m'occupe du reste (sauf que je n'ai pas fait l'architecture Maven ).
    Du coup j'ai des problèmes à répétition du style : le module qui est sous la responsabilité de Smith utilise mon code avec la release 1.2 et je voudrais tester son code avec ma version 1.3 -SNAPSHOT ... sauf que les dépendances traversent 4 ou 5 niveaux d'héritage! etc. etc.

    le problème que je viens de décrire dans mon post initial est récurrent et me fait perdre un temps fou!

    edit: pour ceux qui se poseraient des question sur la notion de projet: Il s'agit d'un ensemble de programmes, utilisant un framework commun et tournant sur differentes machines (la couche de com. fait partie du framework).
    On a donc des dépendances compliquées: il y a des programmes indépendants qui utilisent plus ou moins des groupes de codes communs (utilitaires, framework, communication, etc...)
    tout ça forme un vaste "projet" divisé en des tas de Modules (ou de multi-modules) avec des cycles de vie décalés.

  6. #6
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    Ok je pense comprendre ton soucis et du coup je dirais que tu devrais avoir des projets séparé (donc pas multi-module) pour tous les sous projet qui ne suivent pas le même cycle de vie et à mon avis, tu devrais créer une nouvelle branche pour utiliser ton projet avec un "sous-projet" dans une version différente, du coup sur ton repository maven tu aura tes multiples version.

    Tu devrais avoir sur ton SVN ou autre qqch du genre :
    - Branche Projet version 1.0.0 avec dépendance librairie machin-chose 1.2
    - Branche Projet version 1.0.1 avec dépendance librairie machin-chose 1.3
    etc ....

    Je sais pas si je suis assez claire mais perso je ferais comme ça. Après c'est sûr que tu peux te retrouver avec plein de version différente de projet sur ta machine .....

    Mais le mieux c'est que tu nous post un exemple de tes pom , si c'est confidentielle change les noms dedans.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/10/2006, 12h38
  2. [5.5.17] Comment gérer des autorisations
    Par elitost dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 12/09/2006, 20h20
  3. Réponses: 9
    Dernier message: 23/08/2006, 15h12
  4. Comment gérer des services par programmation avec Delphi ?
    Par isachat666 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 18/12/2005, 18h54
  5. [Firebird] Comment gérer des groupes d'utilisateur
    Par stundman dans le forum Administration
    Réponses: 3
    Dernier message: 16/11/2005, 13h30

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