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 :

[Conception Plugin] Analyse de projets multi-modules


Sujet :

Maven Java

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 20
    Points
    20
    Par défaut [Conception Plugin] Analyse de projets multi-modules
    Bonjour à tous,

    Je vous explique d'abord le contexte avant de vous poser plusieurs questions.

    Je travaille actuellement sur un projet de développement de plugin Maven 2. Le plugin disposera en particulier d'un goal run, qui devra analyser les POM des différents modules d'un projet Maven quelconque.

    Le concept de base du goal run est qu'il devra être lancé qu'une seule fois à partir du module parent (de plus haut niveau). Le plugin ne devra donc pas être éxecuté sur l'ensemble des modules fils (ce qui n'est pas le comportement par défaut de Maven).

    Pur faire cela, j'ai lu la documentation de Maven, et deux options me semblent intéressantes : @aggregator et @inheritByDefault false.

    Voici les questions que je me pose :

    1) L'une de ce 2 options est-elle appropriée à mon problème ?
    2) Je n'ai pas cerné la différence entre ces 2 options. Quelle est-elle ?


    Ensuite, j'ai un autre problème.
    Dans le code source de mon Mojo run, j'ai mis ceci pour récupérer le projet Maven en cours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
         /**
         * @parameter expression="${project}"
         */
        protected MavenProject project;
    Toujours dans le contexte d'un projet multi-module et du goal run lancé une seule fois, le problème est que la variable 'project' contient le POM parent.

    3) Comment accède-t-on aux POM des modules fils ? (ou comment récupérer des variables de type MavenProject correspondant au mapping des fichiers POM fils)

    Voila.
    Merci d'avance pour vos réponses.

  2. #2
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Je pense avoir trouvé réponse à mes questions :

    Pour récupérer les projets fils :
    project.getCollectedProjects();

    J'ai l'impression que Aggregator est plus adapté. Mais je veux quand même bien votre avis sur la question.

  3. #3
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Août 2007
    Messages : 84
    Points : 98
    Points
    98
    Par défaut
    Mon avis sur les différences entre aggregator et inheritedByDefault.

    aggregator
    Un plugin aggregator ne sera lancé qu'une fois par réacteur, et permet d'en centraliser l'exécution et les résultats.

    inheritedByDefault aura comme effet que tout module ayant un tag <parent> référençant un pom ayant ton plugin configuré aura ce même plugin configuré (pratique par exemple pour définir le maven-eclipse-plugin dans un super pom, et ne plus devoir le faire dans aucun autre pom ayant ce super pom comme ancêtre).

    Pour accéder aux projets enfants, j'ai plutôt habitude d'utiliser les reactor projects, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /**
         * If the executed project is a reactor project, this will contains the full
         * list of projects in the reactor.
         *
         * @parameter expression="${reactorProjects}"
         * @required
         * @readonly
         */
        protected List<MavenProject> reactorProjects;
    Mais j'imagine que getCollectedProjects() doit réaliser plus ou moins la même chose.

  4. #4
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Merci pour l'explication.
    De plus, j'ai testé "reactorProjects", cela marche aussi.
    Mais il y a quand même une différence avec getCollectedProjects().

    En appelant getCollectedProjects(), on récupère uniquement les projets fils.
    En utilisant "reactorProjects", on récupère les projets fils, mais aussi le projet actuel.

    Par contre, j'ai une autre question.
    Dans le livre "Maven, the definitive guide", j'ai lu :
    "Aggregator is slated for deprecation in a future release of Maven".

    Pourquoi ?

  5. #5
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Août 2007
    Messages : 84
    Points : 98
    Points
    98
    Par défaut
    Si je me souviens bien, c'est parce que certains développeurs de Maven sont insatisfaits du fonctionnement actuel, et proposent de réimplémenter le tout.

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    OK, merci de satisfaire ma curiosité

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    En fait, je n'avais pas vu, mais quand on fait un goal aggregate et qu'on le lie au cycle de vie d'un projet Maven multi-module, le goal est appelé sur tous les projets fils, même si le goal est aggregate.

    Comment faire pour que le goal ne soit lancé que sur le module parent, alors qu'on a lié le goal au cycle de vie du module ?

  8. #8
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    avez vous trouvé une solution à votre problème à propos de la propriété inheritedByDefault ?

    Aggregate, comme son nom l'indique, permet de regrouper le l'exécution de goals pour la hiérarchie de poms. L'exemple le plus courant est celui de la génération de la javadoc. Le goal est appelé depuis le parent pour tout les fils directement et ne sera pas rappelé par la suite dans le passage par les fils.

    Je cherchais à faire la même chose que vous, appeler depuis un certain niveau de ma hiérarchie de poms un plugin et qu'il ne soit pas appelé dans ses sous-modules alors que je l'ai lié à une phase du cycle de vie.

    InheritedByDefault à false me semble la bonne solution mais le plugin descriptor généré à l'installation de mon plugin ne prend pas en compte le tag @inheritedByDefault. Il est mit à true au lieu de false comme je l'avais défini...

    C'est un autre soucis mais je souhaitais savoir si vous aviez trouvé une autre solution.

    Merci d'avance.

Discussions similaires

  1. Réponses: 11
    Dernier message: 01/04/2008, 14h42
  2. Projet multi-modules, génération de la javadoc
    Par hel22 dans le forum Maven
    Réponses: 2
    Dernier message: 14/11/2007, 11h39
  3. Réponses: 7
    Dernier message: 03/04/2007, 01h10
  4. [Continuum] projet multi-modules +authentification serveur
    Par rseM2 dans le forum Intégration Continue
    Réponses: 13
    Dernier message: 15/02/2007, 17h28
  5. BUILD ERROR sur création d'un projet multi-modules
    Par elitost dans le forum Maven
    Réponses: 1
    Dernier message: 28/08/2006, 15h23

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