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 :

[M2] structure multi-modules et ordre d'execution


Sujet :

Maven Java

  1. #1
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut [M2] structure multi-modules et ordre d'execution
    Salut à tous,

    J'ai un projet multi-modules qui lorsque je fais un mvn install, s'execute dans l'ordre défini par l'arborescence des poms.

    Mon souci est que j'ai défini des profiles afin que durant la phase de pre-intragtion-test, je déploies certains éléments à des endroits spécifiques.

    Or ces profiles doivent être exécutés dans un ordre précis.

    J'introduis donc des dépendances.

    Comment faire pour introduire une dépendance dans un pom sur un projet de type pom qui contient 3 modules (type jar) et que celui-ci s'execute dans sa globalité (install du pom et install des 3 jars sous-jacents) avant que mon pom qui contient la dépendance s'execute.

    pour le coup, je suis pas sûr d'être super clair

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Points : 1 524
    Points
    1 524
    Par défaut
    Citation Envoyé par david.vicente@tiscali.fr
    pour le coup, je suis pas sûr d'être super clair
    Effectivement, ce n'est pas super clair

  3. #3
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut
    bon on va essayer d'être plus clair, attention c'est parti

    mon projet est comme ça :

    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
     
    Parent
    	|_module 1
    			|_module 1.1
    			|_module 1.2
    	|_module 2
    			|_module 2.1
    			|_module 2.2
    	|_module 3
    			|_module 3.1
    			|_module 3.2
    	|_module 4
    			|_module 4.1
    				|_module 4.1.1
    				|_module 4.1.2
    			|_module 4.2
    			|_module 4.3
    quand je vais un mvn install, le reactor ordonne l'install comme suit
    parent
    module 1
    module 1.1
    module 1.2
    module 2
    module 2.1
    module 2.2
    module 3
    module 3.1
    module 3.2
    module 4
    module 4.1
    module 4.1.1
    module 4.1.2
    module 4.2
    module 4.3

    ce qui est tout à fait normal

    maintenant, j'introduit des profiles afin que durant la phase de pre-integration-test, je puisse copier certains jars à des endroits spécifiques
    ( comme mettre à jour la BDD, deployer des jars dans Tomcat, deployer des paquets dans Vignette ) comme suit

    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
     
    Parent
    	|_module 1
    			|_module 1.1 -> profile "deploytomcat"
    			|_module 1.2 -> profile "updatebdd2"
    	|_module 2
    			|_module 2.1
    			|_module 2.2
    	|_module 3
    			|_module 3.1 -> profile "deploytomcat"
    			|_module 3.2
    	|_module 4
    			|_module 4.1
    				|_module 4.1.1 -> profile "importVignette"
    				|_module 4.1.2 -> profile "importVignette"
    			|_module 4.2 -> profile "updatebdd1"
    			|_module 4.3 -> profile "deploytomcat"
    ces profiles doivent être ordonnés afin d'obtenir un ordonnancement comme suit : updatebdd1, updatebdd2, importVignette,deploytomcat

    donc je voudrais avoir en positionnant les dépendances ( de type "provided" ) correctement

    parent
    module 1
    module 4.2 -> profile "updatebdd1"
    module 1.2 -> profile "updatebdd2"
    module 4.1
    module 4.1.1 -> profile "importVignette"
    module 4.1.2 -> profile "importVignette"
    module 1.1 -> profile "deploytomcat"
    module 2
    module 2.1
    module 2.2
    module 3
    module 3.1 -> profile "deploytomcat"
    module 3.2
    module 4
    module 4.3 -> profile "deploytomcat"


    Sur chaque projet avec profile "deploytomcat", j'ai mis une dépendance sur le module 4.1 afin que les 2 modules 4.1.1. et 4.1.2 soient installés.

    or notamment sur le module 1.1, il s'execute bien aprés le module 4.1 mais les 2 sous-modules 4.1.1 et 4.1.2 non.

    Donc ma question est : comment faire une dépendance globale sur un projet de type pom sans faire une dépendance pour chaque sous-module afin d'être sûr que les 2 s'executent avant ?

    et là c'est mieux ?

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Points : 1 524
    Points
    1 524
    Par défaut
    oui, c'est plus clair

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Points : 1 524
    Points
    1 524
    Par défaut
    en fait ton module 1.1 ne dépend pas des modules 4.1.1 et 4.1.2, donc maven ne les prends pas en compte pour calculer l'ordre des dépendances.

    Au lieu d'ajouter le pom 4.1 dans 1.1, il faut que tu ajoutes 4.1.1 ET 4.1.2

  6. #6
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut
    ben c'est exactement ce que je voulais éviter, car il est possible dans le futur que j'ai un 4.1.3 et il faudrait que j'ajoute cette dépendance sur tous ceux qui en ont besoin.

    d'un autre côté, je m'en doutais mais je me suis dit, on sait jamais !!!

    mais bon si il n'y a pas d'autres solutions

    en tout, encore un grand merci pour ton aide

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Points : 1 524
    Points
    1 524
    Par défaut
    De nombreuses personnes font comme toi pour les déploiements, mais ce n'est pas ce que je préfère.

    Perso, je préfére faire un pom spécifique qui contient tout ce qui est déploiement, ainsi tout est centralisé.

    my 2 cents.

  8. #8
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut
    et tu fais ça comment ?

    ça m'intéresse beaucoup ton idée !!!

    donc tu as un pom pour la compile et le packaging et un autre pour le déploiement.

    tu peux me donner un exemple de pom qui fait ça ?

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Points : 1 524
    Points
    1 524
    Par défaut
    Je me doutais que çà allait t'intéresser mais ce n'ai pas possible d'utiliser cette technique sur tout type de projet.

    Dans ton "pom de déploiment", tu ajoutes l'ensemble des tes dépendances, et tu mes tes profiles, je suppose que tu utilises le plugin ant-run pour faire tes déploiements, exact?
    Dans ce cas, tu ordonnes les taches ant dans tes différents profiles de ce pom

    Suis-je clair?

  10. #10
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut
    ce coup-ci pas trop

    effectivement j'ai du ant-run mais aussi des plugins Maven que j'ai développé en spécifiques ( notamment pour la mise à jour de la BDD et ceux spécifiques pour déployer ou importer des éléments dans Vignette)

    donc si tu as un exemple à me fournir (sans que ça pose de pb de confidentialité)

    sinon est-ce qu'on peut faire un pom pom-deploy.xml avec

    <module>module4/module 4.1/module 4.1.1</module>
    <module>module4/module 4.1/module 4.1.2</module>

    etc ....

    je fais un mvn install avec mon pom.xml

    et ensuite je fais un mvn install -f pom-deploy.xml -P mes profiles...

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Points : 1 524
    Points
    1 524
    Par défaut
    Je n'ai pas d'exemple sous la main que tu pourrais réutiliser, mais je vais essayer d'être plus clair.

    En plus de tous tes modules, tu crées un nouveau module (par exemple, module_deployer):

    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
    18
     
    Parent
    	|_module 1
    			|_module 1.1
    			|_module 1.2
    	|_module 2
    			|_module 2.1
    			|_module 2.2
    	|_module 3
    			|_module 3.1
    			|_module 3.2
    	|_module 4
    			|_module 4.1
    				|_module 4.1.1
    				|_module 4.1.2
    			|_module 4.2
    			|_module 4.3
    	|_module deployer
    Dans le pom de ce module, tu ajoutes l'ensemble de tes autres modules comme dépendances, ainsi que tes profiles:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    <project>
      <artifactId>module_deployer</artifactId>
      <packaging>pom</packaging>
      <dependencies>
        <dependency>
           module_4.1.1
        </dependency>
        <dependency>
           module_4.1.2
        </dependency>
        ...
      </dependencies>
     
      <profiles>
        <profile>
          <id>updatebdd1</id>
          <build>
            <plugins>
                 Plugin(s) d'update la la bdd1
            </plugins>
          </build>
        </profile>
        <profile>
          <id>updatebdd2</id>
          <build>
            <plugins>
                 Plugin(s) d'update la la bdd2
            </plugins>
          </build>
        </profile>
        <profile>
          <id>deploytomcat</id>
          <build>
            <plugins>
                 Plugin(s) pour déployer l'ensemble des artifacts dans tomcat
            </plugins>
          </build>
        </profile>
        <profile>
          <id>importvignette</id>
          <build>
            <plugins>
                 Plugin(s) pour vignette
            </plugins>
          </build>
        </profile>
      </profiles>
    </project>
    Afin d'exécuter les plugins de chaque profile dans le bon ordre, il suffit de leur attribuer des phases différentes, par exemple "process-resources" pour les plugins d'update des BD et install pour tomcat et vignette.

    Tu peux ensuite ajouter ce nouveau module à ton pom root, si tu n'ajoute pas de profile à la ligne de commande maven, le pom sera installer dans le repo local, et si tu ajoutes des profiles, le(s) profile(s) de celui-ci seront exécutés.

  12. #12
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut
    je n'y aurai pas pas pensé.

    c'est lumineux !!!

    bravo et encore merci

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

Discussions similaires

  1. Structure d'un projet Maven multi module
    Par inforedaster dans le forum Maven
    Réponses: 3
    Dernier message: 19/11/2014, 17h31
  2. Execution d'un plugin en multi-module
    Par Kaeluan dans le forum Maven
    Réponses: 1
    Dernier message: 18/11/2009, 23h41
  3. BUILD ERROR sur création d'un projet multi-modules
    Par elitost dans le forum Maven
    Réponses: 1
    Dernier message: 28/08/2006, 16h23
  4. Réponses: 5
    Dernier message: 29/12/2005, 14h47
  5. probleme ordre d'execution de ma page asp
    Par Shosho dans le forum ASP
    Réponses: 5
    Dernier message: 10/05/2005, 15h51

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